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

问题描述 投票:1回答:1

我有一个带TextColumn的DataGridView。一些单元格可能有点长,以便在DataGridView中显示,因此我截断文本并在文本中添加“...”。我不想将文本包装成多行。

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

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

c# winforms datagridview textbox edit
1个回答
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;
    }
}

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

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

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

public class MyTextBoxColumn:DataGridViewTextBoxColumn
{
    public MyTextBoxColumn()
    {
        CellTemplate = new MyTextBoxCell();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.