-2

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

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

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

我使用ButtonandCheckListBox删除数据网格中的列,代码如下:

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;
            }
        };
    }
}

运行时出现错误:

你调用的对象是空的。

谢谢。

4

1 回答 1

0

在您的 Form2_Load 代码中,您正在填充“dataGridView2”

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

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

但是在 btnSelect_Click 中,您尝试迭代 MyDataGridView,在上面的代码中,我没有看到在任何地方使用 MyDataGridView。也许您从某处复制并粘贴了此代码,却忘记将 MyDataGridView 更改为实际在您的表单 dataGridView2 上的 datagridview 名称?修改如下...

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;
        }
    };
}

}

于 2013-10-31T20:03:43.603 回答