简体   繁体   中英

Strange issue with a datagridview and a tabcontrol C#

I have a strange problem. I have a TabControl with two TabPages . Each page has a datagridview . Both datagridviews are populated with XML files.

I want to have the AutoSizeColumnsMode set to " Fill " for both DataGridViews . I want to set the width of columns in my code.

And everything works fine for the TabPage1 but setting width for the DataGridView on TabPage2 throws the NullReferenceException .

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 .

Here's the code:

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

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.

THe only thing I can se at the moment is that you are not doing this on tabpage 2

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

try

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM