我有一个带TextColumn的DataGridView。一些单元格可能有点长,以便在DataGridView中显示,因此我截断文本并在文本中添加“...”。我不想将文本包装成多行。
我想让用户编辑列中的文本。在EditingControlShowing中,我当前将编辑TextBox'文本设置为文本的完整值(否则只显示截断的值)。到目前为止一切都很好。
如何使编辑TextBox垂直扩展到其单元格之外(单元格只有一行高),以便用户更容易编辑多行条目?
您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的PositionEditingControl
并设置编辑面板和编辑控件的位置和大小:
public class MyTextBoxCell : DataGridViewTextBoxCell
{
public override void PositionEditingControl(bool setLocation, bool setSize,
Rectangle cellBounds, Rectangle cellClip, DataGridViewCellStyle cellStyle,
bool singleVerticalBorderAdded, bool singleHorizontalBorderAdded,
bool isFirstDisplayedColumn, bool isFirstDisplayedRow)
{
cellClip.Height = cellClip.Height *4; // ← Or any other suitable height
cellBounds.Height = cellBounds.Height * 4;
var r = base.PositionEditingPanel( cellBounds, cellClip, cellStyle,
singleVerticalBorderAdded, singleHorizontalBorderAdded,
isFirstDisplayedColumn, isFirstDisplayedRow);
this.DataGridView.EditingControl.Location = r.Location;
this.DataGridView.EditingControl.Size = r.Size;
}
public override void InitializeEditingControl(int rowIndex,
object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
{
base.InitializeEditingControl(rowIndex, initialFormattedValue,
dataGridViewCellStyle);
((TextBox)this.DataGridView.EditingControl).Multiline = true;
((TextBox)this.DataGridView.EditingControl).BorderStyle = BorderStyle.Fixed3D;
}
}
然后使用它,将此单元格的实例分配给要更改其编辑器大小的CellTemplate
的Column
属性:
this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();
或者,您可以创建新列并使用自定义列:
public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
public MyTextBoxColumn()
{
CellTemplate = new MyTextBoxCell();
}
}