C# datagridview和Tabc控件的奇怪问题#

C# datagridview和Tabc控件的奇怪问题#,c#,datagridview,tabcontrol,C#,Datagridview,Tabcontrol,我有一个奇怪的问题。我有一个TabControl和两个TabPages。每个页面都有一个datagridview。两个datagridview都填充了XML文件 我想将两个datagridview的AutoSizeColumnsMode设置为“Fill”。我想在代码中设置列的宽度 对于TabPage1来说,一切正常,但是在TabPage2上设置DataGridView的宽度会引发NullReferenceException 我真的不明白,因为我做了与datagridview1相同的事情,工作正常

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

我想将两个
datagridview
AutoSizeColumnsMode
设置为“
Fill
”。我想在代码中设置列的宽度

对于
TabPage1
来说,一切正常,但是在
TabPage2
上设置
DataGridView
的宽度会引发
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页上这样做

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


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

这并不重要,也没有任何意义。这意味着该列不存在。您是否正在从
File2.xml
获取数据?换句话说,ds2实际上包含加载的数据吗?是的,我从File2.xml获取数据。问题是当我尝试更改列的宽度时。即使改变可见性也能起作用。
dataGridView2.Sort(dataGridView2.Columns[1], ListSortDirection.Ascending);