如何允许用户编辑 DataGridView 的列名称

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

这篇帖子通常询问如何编辑

DataGridView
的列名称。在这里,我特别感兴趣的是允许用户自己重新命名显示的列标题。

This 答案指出您必须使用

TextBox
进行自定义实现才能实现此功能。

你如何实现这个?

c# winforms datagridview datagridviewcolumn
1个回答
0
投票

假设您的

DataGridView
名为
dgv

这允许用户通过双击重新命名。可以通过任何取消选择

TextBox
的方式取消重命名,无论是单击、按 Tab 键还是等等。

private void dgv_columnheadermousedoubleclick(object sender, DataGridViewCellMouseEventArgs e)
{
    TextBox temp = new TextBox();

    this.Controls.Add(temp);

    temp.Multiline = true; // allow to be vertically sized
    temp.BorderStyle = BorderStyle.FixedSingle;

    // Position and size the rename box
    Rectangle bounds = dgv.GetCellDisplayRectangle(
        e.ColumnIndex, 
        rowIndex: -1,           // -1 is the column header
        cutOverflow: false);    
    bounds.X += dgv.Location.X;
    bounds.Y += dgv.Location.Y; // display rect. coords are relative to the dgv. 

    temp.Bounds = bounds;

    temp.BringToFront();
    temp.Select();       // you can start typing

    // Sets the rename using the enter key
    temp.KeyDown += (s, ea) =>
    {
        if (ea.KeyCode == Keys.Enter)
        {
            dgv.Columns[e.ColumnIndex].HeaderText = temp.Text.Trim();
            ea.Handled = true; // prevents the annoying "ding" noise
            temp.Dispose();
        }
    };

    // If the user clicks out of the textbox they can "cancel" the re-name 
    temp.Leave += (s, ea) =>
    {
        temp.Dispose();
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.