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