删除DataGridView列时出现意外结果

时间:2011-08-12 15:30:38

标签: c#

        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应该至少出现一次。但我仍然困惑为什么......

4 个答案:

答案 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列,不要相信默认处理。