数据网格视图和tabcontrol C#的奇怪问题

时间:2013-06-10 18:36:35

标签: c# datagridview tabcontrol

我有一个奇怪的问题。我有两个TabControl TabPages。每个页面都有一个datagridviewdatagridviews都填充了XML个文件。

我想将AutoSizeColumnsMode设置为" Fill"两个DataGridViews。我想在我的代码中设置列的宽度。

TabPage1一切正常,但DataGridView TabPage2的设置宽度会引发NullReferenceException

我真的没有得到它,因为我对datagridview1做了同样的事情,并且工作正常但datagridview2抛出异常。此外,如果我选择任何AutoSizeColumnsMode值但Fill

,则毫无例外

以下是代码:

        XmlReader xmlFile = XmlReader.Create("File1.xml", new XmlReaderSettings());
        DataSet ds = new DataSet();
        ds.ReadXml(xmlFile);



            dataGridView1.DataSource = ds.Tables[0];
            dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Ascending);

           dataGridView1.Columns[0].Width = 35;
            dataGridView1.Columns[1].Width = 248;
            dataGridView1.Columns[2].Width = 110;
            dataGridView1.Columns[3].Width = 140;
            dataGridView1.Columns[9].Width = 127;
            dataGridView1.Columns[0].Visible = false;
            dataGridView1.Columns[1].Visible = true;
            dataGridView1.Columns[2].Visible = true;
            dataGridView1.Columns[3].Visible = true;
            dataGridView1.Columns[4].Visible = false;
            dataGridView1.Columns[5].Visible = false;
            dataGridView1.Columns[6].Visible = false;
            dataGridView1.Columns[7].Visible = false;
            dataGridView1.Columns[8].Visible = false;
            dataGridView1.Columns[9].Visible = true;
            dataGridView1.Columns[10].Visible = true;
            dataGridView1.Columns[10].Width = 100;

            xmlFile.Close();

        XmlReader xmlFile2= XmlReader.Create("File2.xml", new XmlReaderSettings());
        DataSet ds2 = new DataSet();
        ds2.ReadXml(xmlFile2);
        dataGridView2.DataSource = ds2.Tables[0];


            dataGridView2.Columns[0].Width = 135; // The exception is thrown here
            dataGridView2.Columns[9].Width = 200;
            dataGridView2.Columns[8].Width = 300;
            dataGridView2.Columns[7].Width = 70;
            dataGridView2.Columns[6].Width = 70;
            dataGridView2.Columns[5].Width = 124;
            dataGridView2.Columns[4].Width = 81;
            dataGridView2.Columns[3].Width = 70;
            dataGridView2.Columns[2].Width = 70;
            dataGridView2.Columns[1].Width = 124;

            dataGridView2.Columns[0].Visible = true;
            dataGridView2.Columns[1].Visible = true;

            dataGridView2.Columns[2].Visible = true;
            dataGridView2.Columns[3].Visible = true;
            dataGridView2.Columns[4].Visible = true;

            dataGridView2.Columns[5].Visible = false;
            dataGridView2.Columns[6].Visible = false;
            dataGridView2.Columns[7].Visible = false;
            dataGridView2.Columns[9].Visible = false;


            xmlFile2.Close();

2 个答案:

答案 0 :(得分:2)

这是因为在控件可见之前不会更新数据绑定控件(dataGridView2)。见this。您可以刷新绑定,例如,通过以编程方式切换到TabPage2并返回第一个选项卡。

答案 1 :(得分:0)

目前我唯一可以做的就是你没有在标签页2上这样做

dataGridView1.Sort(dataGridView1.Columns[1], ListSortDirection.Ascending);

dataGridView2.Sort(dataGridView2.Columns[1], ListSortDirection.Ascending);