C # Почему индекс столбца меняется случайно на моем DataGridView в элементе управления вкладки - PullRequest
0 голосов
/ 24 августа 2018

У меня действительно странная проблема.У меня есть элемент управления вкладками в форме Windows с 3 вкладками.Каждая вкладка имеет идентичный DataGridView.У меня есть кнопка в столбце 5 на каждом из DataGridViews.Таким образом, идентичные вкладки, идентичные GridView, вертикально идентичный код для заполнения каждой из них, выглядит так, как показано ниже.

Однако индекс столбца работает точно так, как и ожидалось для первой вкладки, т.е.Но для второй и третьей вкладок кажется, что первый столбец виден как индекс, ошибаюсь, -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;

        }
}
...