我有一个带TextColumn的DataGridView。有些单元格可能有点长,无法显示在DataGridView中,所以我截断了文本并添加了" ..."到文本。我不想将文本包装成多行。
我想让用户编辑列中的文本。在EditingControlShowing中,我目前设置了编辑TextBox' text到文本的完整值(否则只显示截断的值)。到目前为止一切都很好。
如何使编辑TextBox在其单元格之外垂直展开(单元格只有一行高),以便用户更容易编辑多行条目?
答案 0 :(得分:1)
您可以更改编辑控件的位置和大小。为此,您需要覆盖单元格的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
的{{1}}属性:
Column
或者您可以创建新列并使用自定义列:
this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();