如何在更大的文本框中编辑 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;
    }
}

然后要使用它,将此单元格的一个实例分配给要更改其编辑器大小的 ColumnCellTemplate 属性:

this.dataGridView1.Columns[0].CellTemplate = new MyTextBoxCell();

或者您可以创建一个新列并使用您的自定义列:

public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
    public MyTextBoxColumn()
    {
        CellTemplate = new MyTextBoxCell();
    }
}