datagridview 和 tabcontrol C# 的奇怪问题 [英] Strange issue with a datagridview and a tabcontrol C#
问题描述
我有一个奇怪的问题.我有一个带有两个 TabPages
的 TabControl
.每个页面都有一个datagridview
.datagridviews
都填充了 XML
文件.
I have a strange problem. I have a TabControl
with two TabPages
. Each page has a datagridview
. Both datagridviews
are populated with XML
files.
我希望将 AutoSizeColumnsMode
设置为Fill
",以用于 DataGridViews
.我想在我的代码中设置列的宽度.
I want to have the AutoSizeColumnsMode
set to "Fill
" for both DataGridViews
. I want to set the width of columns in my code.
对于 TabPage1
一切正常,但是在 TabPage2
上设置 DataGridView
的宽度会引发 NullReferenceException
.
And everything works fine for the TabPage1
but setting width for the DataGridView
on TabPage2
throws the NullReferenceException
.
我真的不明白,因为我对 datagridview1
做了同样的事情并且工作正常但是 datagridview2
抛出异常.此外,如果我选择任何 AutoSizeColumnsMode
值但 Fill
值,也不例外.
I really don't get it because I do the same thing as for datagridview1
and there works fine but datagridview2
throws the exception. Additionally, there is no exception if I choose any AutoSizeColumnsMode
value but 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
并返回到第一个选项卡.
This is because a data-bound control(dataGridView2
) is not updated until the control is made visible. See this. You can refresh the binding, for example, by programmatically switching to TabPage2
and back to the first tab.
这篇关于datagridview 和 tabcontrol C# 的奇怪问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!