DataTable dt = new DataTable();
dt.Columns.Add("col1");
dt.Columns.Add("col2");
dt.Columns.Add("col3");
dt.Columns.Add("col4");
dt.Columns.Add("col5");
dataGridView1.DataSource = dt;
dataGridView1.Columns.RemoveAt(3);
dataGridView1.Columns.RemoveAt(2);
dataGridView1.Columns.RemoveAt(0);
在这个程序中,我创建了一个包含5列的DataTable。这将是DataGridView的DataSource。 DataTable中的某些列不需要由用户看到,但稍后将由程序使用。
在最后一行之后,列排列为:col2,col5,col1,col3,col4。为什么会这样?它不应该从DataGridView中删除吗?我应该怎么做才能使它显示为“col2,col5”?
编辑:我想从DataGridView 删除一些列,但仍然可以在DataTable中使用。此外,它适用于事件(如Button_Click)
编辑:我仍然还没弄清楚为什么会发生这种情况。我别无选择,只能创建另一个线程(BackgroundWorker)来执行此操作...
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
DataTable dt = new DataTable();
int i;
dataGridView1.Invoke((MethodInvoker)delegate
{
dt.Columns.Add("col1");
dt.Columns.Add("col2");
dt.Columns.Add("col3");
dt.Columns.Add("col4");
dt.Columns.Add("col5");
dataGridView1.DataSource = dt;
dataGridView1.Columns.RemoveAt(3);
dataGridView1.Columns.RemoveAt(2);
dataGridView1.Columns.RemoveAt(0);
});
}
据我所知,哈里斯哈桑是对的;包含DataGridView的Form应该至少出现一次。但我仍然困惑为什么......
答案 0 :(得分:0)
您可以使用 DataGridView 的 DisplayIndex 属性对列进行排序。要隐藏列,您可以将false设置为特定列的可见属性。
dataGridView1.Columns["ColumnTobeHided"].Visible = false;
答案 1 :(得分:0)
您可以尝试设置其可见性,而不是删除列...
dataGridView1.DataSource = dt;
dataGridView1.Columns[3].Visible = false;
dataGridView1.Columns[2].Visible = false;
dataGridView1.Columns[0].Visible = false;
答案 2 :(得分:0)
据我所知,在删除任何列之前,您必须显示一次DataGridView。通过一次显示DataGridView然后删除列并看看会发生什么来试试这个
答案 3 :(得分:0)
如果您不希望网格中的列用于表中的所有列,请在将数据表绑定到数据源之前将datagridview.AutoGenerateColumns设置为false。然后创建并绑定您真正想要的datagridview列。
AutoGenerateColumns默认为true,但它很少提供我们真正想要的东西。花点时间完全按照自己的意愿构建datagridview列,不要相信默认处理。