C#为什么在选项卡控件内的我的DataGridView上列索引会随机更改

C#为什么在选项卡控件内的我的DataGridView上列索引会随机更改,c#,datagridview,tabcontrol,C#,Datagridview,Tabcontrol,我有一个很奇怪的问题。我在Windows窗体上有一个带有3个选项卡的选项卡控件。每个选项卡都有一个相同的DataGridView。我在每个DataGridView的第5列中都有一个按钮。相同的选项卡,相同的网格视图,垂直相同的代码来填充每一个,如下所示 但是,列索引的工作方式与第一个选项卡的预期完全相同,即零索引。但对于第二个和第三个选项卡,它似乎将第一列视为索引,呃,-1,我猜是因为它没有看到它。但这里有一个非常奇怪和恼人的部分……它似乎是随机变化的。有时,当我运行程序时,它会按预期工作,并将

我有一个很奇怪的问题。我在Windows窗体上有一个带有3个选项卡的选项卡控件。每个选项卡都有一个相同的DataGridView。我在每个DataGridView的第5列中都有一个按钮。相同的选项卡,相同的网格视图,垂直相同的代码来填充每一个,如下所示

但是,列索引的工作方式与第一个选项卡的预期完全相同,即零索引。但对于第二个和第三个选项卡,它似乎将第一列视为索引,呃,-1,我猜是因为它没有看到它。但这里有一个非常奇怪和恼人的部分……它似乎是随机变化的。有时,当我运行程序时,它会按预期工作,并将第一列作为索引0,有时它会显示奇怪的行为,如所述,完全忽略第一列并将第二列作为索引0。这是一个巨大的问题,因为我从列中的单元格中获取值来填充另一个表单——第5列中的按钮将打开该表单

private void populateToolsDataGrid()
        {
           doc = XDocument.Load(XMLfilePath + "\\DataFile\\ILS_Support_TOOLS.xml"); // this works but does not allow sorting
            var xmlData = from supeq in doc.Elements("data").Elements("supequi").Elements("tool")
                          select new
                          {
                              Name = supeq.Element("toolName").Value,
                              NSN = supeq.Element("toolNSN").Value,
                              PN = supeq.Element("toolPN").Value,
                              Cage = supeq.Element("toolCage").Value,
                              ID = supeq.Attribute("id").Value
                          };
            GridViewTools.DataSource = xmlData.ToList();
            GridViewTools.Columns["ID"].Visible = false;

            if (GridViewTools.Columns.Contains("detailsButton") == false)
            {
                DataGridViewButtonColumn button = new DataGridViewButtonColumn();
                {
                    button.Name = "detailsButton";
                    button.HeaderText = "Details";
                    button.Text = "Details";
                    button.UseColumnTextForButtonValue = true; 
                    GridViewTools.Columns.Add(button);

                }
            }

            if (toolDetailsButtonInitialised == false)
            {
                GridViewTools.CellClick += dataGridViewTools_CellClick; // click event for the button click
                toolDetailsButtonInitialised = true;
            }

            GridViewTools.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

        }
}

隐藏选项卡中的控件并不总是如预期的那样更新。尝试在馈送DGV之前显示选项卡!谢谢你的评论。您的意思是在填充dgv之前使用“SelectTab”,即tabControl1.SelectTab(0)还是其他“显示选项卡”的方式?是的,这就是我的意思。我觉得很刻薄,但会奏效。。