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

我有一个奇怪的问题。 我有一个带有两个TabPagesTabControl 。 每个页面都有一个datagridview 。 两个datagridviews都填充了XML文件。

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

对于TabPage1 ,一切正常,但TabPage2上的DataGridView设置宽度会抛出NullReferenceException

我真的没有得到它,因为我做了与datagridview1相同的事情,并且工作正常,但datagridview2抛出exception。 此外,如果我选择任何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(); 

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

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

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

尝试

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