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

时间:2018-08-24 13:38:46

标签: c# datagridview tabcontrol

我有一个非常奇怪的问题。我在带有3个选项卡的Windows窗体上有一个选项卡控件。每个选项卡都有一个相同的DataGridView。我在每个DataGridView的第5列中都有一个按钮。因此,相同的选项卡,相同的GridView,用于填充每个内容的垂直相同的代码,如下所示。

但是,列索引的工作方式与第一个标签页完全相同,即零索引。但是对于第二个和第三个选项卡,它似乎将第一列视为index,err,-1,我想是因为它没有看到它。但这是一个真正奇怪且令人讨厌的部分。。。它似乎是随机变化的。有时,当我运行程序时,它按预期方式工作并且将第一列作为索引0,有时它会显示出奇怪的行为,如完全忽略第一列所描述的那样,而将第二列视为索引0。这对于我来说是一个巨大的问题从列中的单元格获取值以填充另一个Form-第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;

        }
}

0 个答案:

没有答案