如何在更大的文本框中编辑 DataGridView 文本单元格
How to edit DataGridView Text cell in a bigger textbox
我有一个带有 TextColumn 的 DataGridView。有些单元格在 DataGridView 中显示可能有点长,因此我截断了文本并在文本中添加了“...”。我不想将文本换行。
我想让用户编辑列中的文本。在 EditingControlShowing 中,我目前将编辑文本框的文本设置为文本的完整值(否则只显示截断的值)。目前一切正常。
如何使编辑文本框垂直扩展超出其单元格(单元格只有一行高),以便用户更轻松地编辑多行条目?
您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的 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;
}
}
然后要使用它,将此单元格的一个实例分配给要更改其编辑器大小的 Column
的 CellTemplate
属性:
this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();
或者您可以创建一个新列并使用您的自定义列:
public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
public MyTextBoxColumn()
{
CellTemplate = new MyTextBoxCell();
}
}
我有一个带有 TextColumn 的 DataGridView。有些单元格在 DataGridView 中显示可能有点长,因此我截断了文本并在文本中添加了“...”。我不想将文本换行。
我想让用户编辑列中的文本。在 EditingControlShowing 中,我目前将编辑文本框的文本设置为文本的完整值(否则只显示截断的值)。目前一切正常。
如何使编辑文本框垂直扩展超出其单元格(单元格只有一行高),以便用户更轻松地编辑多行条目?
您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的 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;
}
}
然后要使用它,将此单元格的一个实例分配给要更改其编辑器大小的 Column
的 CellTemplate
属性:
this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();
或者您可以创建一个新列并使用您的自定义列:
public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
public MyTextBoxColumn()
{
CellTemplate = new MyTextBoxCell();
}
}