这篇帖子通常询问如何编辑
DataGridView
的列名称。在这里,我特别感兴趣的是允许用户自己重新命名显示的列标题。
This 答案指出您必须使用
TextBox
进行自定义实现才能实现此功能。
你如何实现这个?
假设您的
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();
};
}