datagridview 和 tabcontrol C# 的奇怪问题 [英] Strange issue with a datagridview and a tabcontrol C#

查看:25
本文介绍了datagridview 和 tabcontrol C# 的奇怪问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的问题.我有一个带有两个 TabPagesTabControl.每个页面都有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆