通过复选框删除datagrid中的列

时间:2013-10-31 18:13:35

标签: c#

我有这段代码的数据网格:

private void Form2_Load(object sender, EventArgs e)
{   
    //loadGrid(); 
    this.dataGridView2.Columns.Add("c1", "???");

    this.dataGridView2.Columns.Add("c2", "?????");
}

我使用ButtonCheckListBox使用此代码删除数据网格中的列:

private void btnSelect_Click(object sender, EventArgs e)
{
    foreach (DataGridViewColumn column in MyDataGridView.Columns)
    {
        checkedListBox1.Items.Add(column.HeaderText, column.Visible);
        checkedListBox1.ItemCheck += (ss, ee) =>
        {
            if (checkedListBox1.SelectedItem != null)
            {
                var selectedItem = checkedListBox1.SelectedItem.ToString();
                MyDataGridView.Columns[selectedItem].Visible = ee.NewValue == CheckState.Checked;
            }
        };
    }
}

运行时我有一个错误:

  

对象引用未设置为对象的实例。

感谢。

1 个答案:

答案 0 :(得分:0)

在Form2_Load代码中填充“dataGridView2”

this.dataGridView2.Columns.Add("c1", "???");

this.dataGridView2.Columns.Add("c2", "?????");

但是在btnSelect_Click中你试图迭代MyDataGridView,在上面的代码中我没有看到MyDataGridView在任何地方使用过。也许你从某个地方复制并粘贴了这段代码而忘了将MyDataGridView更改为datagridview名称,这实际上是在你的表格dataGridView2上?修改如下......

foreach (DataGridViewColumn column in dataGridView2.Columns)
{
    checkedListBox1.Items.Add(column.HeaderText, column.Visible);
    checkedListBox1.ItemCheck += (ss, ee) =>
    {
        if (checkedListBox1.SelectedItem != null)
        {
            var selectedItem = checkedListBox1.SelectedItem.ToString();
            dataGridView2.Columns[selectedItem].Visible = ee.NewValue == CheckState.Checked;
        }
    };
}

}