C# 如何在较大的文本框中编辑DataGridView文本单元格
我有一个带有文本列的DataGridView。在DataGridView中显示的某些单元格可能有点长,因此我截断了文本并在文本中添加“…”。我不想将文本换行成多行 我想让用户编辑列中的文本。在EditingControlShowing中,我当前将编辑文本框的文本设置为文本的完整值(否则只显示截断值)。到目前为止一切都很好C# 如何在较大的文本框中编辑DataGridView文本单元格,c#,winforms,datagridview,textbox,edit,C#,Winforms,Datagridview,Textbox,Edit,我有一个带有文本列的DataGridView。在DataGridView中显示的某些单元格可能有点长,因此我截断了文本并在文本中添加“…”。我不想将文本换行成多行 我想让用户编辑列中的文本。在EditingControlShowing中,我当前将编辑文本框的文本设置为文本的完整值(否则只显示截断值)。到目前为止一切都很好 如何使编辑文本框垂直扩展到单元格之外(单元格只有一行高),以便于用户编辑多行条目?您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的PositionEditingCont
如何使编辑文本框垂直扩展到单元格之外(单元格只有一行高),以便于用户编辑多行条目?您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的
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
属性:
this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();
或者,您可以创建新列并使用自定义列:
public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
public MyTextBoxColumn()
{
CellTemplate = new MyTextBoxCell();
}
}