【问题标题】:How to edit DataGridView Text cell in a bigger textbox如何在更大的文本框中编辑 DataGridView 文本单元格
【发布时间】:2018-03-23 18:51:20
【问题描述】:

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

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

如何使编辑文本框垂直扩展超出其单元格(单元格只有一行高),以便用户更轻松地编辑多行条目?

【问题讨论】:

    标签: c# winforms datagridview textbox edit


    【解决方案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;
        }
    }
    

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

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

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

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

    【讨论】:

    • ctl.BorderStyle = BorderStyle.Fixed3D; 修复了底部和顶部被裁剪 +1 的问题,但现在有双边框。 :(
    • @bh_earth0 感谢您的反馈。这可能会有所帮助:stackoverflow.com/a/32170212/3110834 但我不确定它是否相关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多