如何在更大的文本框中编辑DataGridView文本单元格

时间:2018-03-23 18:51:21

标签: c# winforms datagridview textbox edit

我有一个带TextColumn的DataGridView。有些单元格可能有点长,无法显示在DataGridView中,所以我截断了文本并添加了" ..."到文本。我不想将文本包装成多行。

我想让用户编辑列中的文本。在EditingControlShowing中,我目前设置了编辑TextBox' text到文本的完整值(否则只显示截断的值)。到目前为止一切都很好。

如何使编辑TextBox在其单元格之外垂直展开(单元格只有一行高),以便用户更容易编辑多行条目?

1 个答案:

答案 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();