C# 如何为自动生成的列设置DataGridView列属性?
我编辑绑定到C# 如何为自动生成的列设置DataGridView列属性?,c#,winforms,visual-studio-2008,datagridview,C#,Winforms,Visual Studio 2008,Datagridview,我编辑绑定到DataGridView的DataTable中的数据。在数据表中创建新列时,视图中将生成一个新列 通常我会在DataGridView\u ColumnAdded事件中设置视图列属性,但是,当前列的默认设置是添加一个视图列,该视图列的SortMode设置为Automatic,它与DataGridViewColumnHeaderSelect属性不兼容,并在触发列添加事件之前导致错误 我想我是通过为新生成的列定义一个“模板”列来解决这个问题的——但是如何解决呢?有趣的是,我用DataGri
DataGridView
的DataTable
中的数据。在数据表中创建新列时,视图中将生成一个新列
通常我会在DataGridView\u ColumnAdded
事件中设置视图列属性,但是,当前列的默认设置是添加一个视图列,该视图列的SortMode
设置为Automatic
,它与DataGridView
ColumnHeaderSelect
属性不兼容,并在触发列添加事件之前导致错误
我想我是通过为新生成的列定义一个“模板”列来解决这个问题的——但是如何解决呢?有趣的是,我用DataGridView
做了很多工作,但我还没有看到这一点。也许务实的选择是手动构建列?可能不是你想听的…好了,该破解了:
为了演示,这里有一个小应用程序:
public partial class Form1 : Form
{
DataTable table = new DataTable();
public Form1()
{
InitializeComponent();
this.dataGridView1.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;
this.dataGridView1.ColumnAdded += new DataGridViewColumnEventHandler(dataGridView1_ColumnAdded);
}
void dataGridView1_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
Console.WriteLine("Column added");
e.Column.SortMode = DataGridViewColumnSortMode.NotSortable;
}
private void button1_Click(object sender, EventArgs e)
{
table.Columns.Add("Name");
table.Columns.Add("Age", typeof(int));
table.Rows.Add("John", 27);
this.FlipSelectionMode();
this.dataGridView1.DataSource = table;
this.FlipSelectionMode();
}
private void button2_Click(object sender, EventArgs e)
{
this.FlipSelectionMode();
table.Columns.Add("Height",typeof(int));
table.Rows[0]["Height"] = 60;
this.FlipSelectionMode();
}
private void FlipSelectionMode()
{
this.dataGridView1.SelectionMode = this.dataGridView1.SelectionMode == DataGridViewSelectionMode.ColumnHeaderSelect ? DataGridViewSelectionMode.CellSelect : DataGridViewSelectionMode.ColumnHeaderSelect;
}
}
基本上,首先我将DataGridView选择模式设置为ColumnHeaderSelect。单击按钮1,我向datatable添加内容,然后将其绑定到DataGridView。诀窍是,在绑定DGV之前和之后调用一个名为FlipSelectionMode()的方法。它的作用是,如果它处于columnheaderselect模式,它会将其翻转到cell select,反之亦然。这样可以添加列。然后,在column added事件中,我将columns sort属性设置为Programminal,否则,您将无法添加其他列。为了演示这一点,在按钮2上单击,它只是添加了另一列,同时在前后翻转选择模式
我同意,这是一个完全的黑客,但DGV是时髦的。我在这方面遇到了很多问题,而且我几乎总是要修改一些东西。你说的手动是什么意思?是在设计器中还是以编程方式?我尽量不使用设计器,因为我反映的数据用于任意大小的双精度数据集,因此列的数量会发生很大变化。