На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: maxim84_, juice
  
> И снова DataGridView...
    Доброго дня вам друзья!
    Начну с цели - хочу добавить в DataGridView некоторое кол-во Column, но не руками.

    получаю схему из БД:
    ExpandedWrap disabled
      private void initDataSet(DataSet dataSet)
              {
                  dataSet.Tables.Clear();
                  DataTable dbTables = LoginForm.connection.GetSchema("Tables");
                  foreach (DataRow dataRow in dbTables.Rows)
                  {
                      string tableName = dataRow["TABLE_NAME"].ToString();
                      if (!string.IsNullOrEmpty(tableName) && !tableName.Equals("sysdiagrams", StringComparison.CurrentCultureIgnoreCase))
                      {
                          DataTable tbl = new DataTable(tableName);
                          DataTable columnsTable = LoginForm.connection.GetSchema("Columns", new[] { null, null, tbl.TableName, null });
                          foreach (DataRow row in columnsTable.Rows)
                          {
                              DataColumn col = new DataColumn(row["COLUMN_NAME"].ToString());
                              col.DataType = row["DATA_TYPE"].GetType();
                              tbl.Columns.Add(col);
                          }
                          dataSet.Tables.Add(tbl);
                      }
                  }
              }


    При некотором событии процедура должна добавить Columns в DataGridView из таблицы Users
    ExpandedWrap disabled
      private void tabControl1_Selected(object sender, TabControlEventArgs e)
              {
                  initDataSet(dataSet1);
                  if (dataSet1.Tables.Contains("users"))
                  {
                      int colcnt = dataSet1.Tables["users"].Columns.Count + 1;
                      DataColumnCollection columns = dataSet1.Tables["users"].Columns;
                      DataGridViewColumnCollection gridViewColumns = CreateColumn(columns, dataGridView1);
                  }
                  
              }

    Явное преобразование DataColumnCollection в DataGridViewColumnCollection (если я правильно понял) просто не существует. Пытаюсь написать преобразовалку:
    ExpandedWrap disabled
      private DataGridViewColumnCollection CreateColumn(DataColumnCollection columns, DataGridView gridView)
              {
                  DataGridViewColumnCollection gridViewColumnCollection = new DataGridViewColumnCollection(gridView);
                  try
                  {
                      foreach (DataColumn column in columns)
                      {
                          DataGridViewColumn gridViewColumn = new DataGridViewColumn();
                          gridViewColumn.HeaderText = column.ColumnName;
                          gridViewColumn.CellTemplate = new DataGridViewTextBoxCell();
                          gridViewColumnCollection.Add(gridViewColumn);
                      }
                  }
                  catch (Exception ex)
                  {
                      MessageBox.Show(ex.ToString(), "Проблема с добавлением столбца! Обратитесь к разработчикам.");
                  }
                  return gridViewColumnCollection;
              }

    Так вот в преобразовалке на второй итерации Foreach (DataColumn column in columns) выполнение падает на gridViewColumnCollection.Add(gridCol);
    в стеке - $exception {"Заданный аргумент находится вне диапазона допустимых значений.\r\nИмя параметра: columnIndex"} System.ArgumentOutOfRangeException
    Очевидно я упускаю инкремент columnIndex при добавлении нового столбца, по крайней мере это единственная моя мысль которая выглядит правдоподобно... Но блин! я не верю что при добавлении в Collection надо заботиться о его внутренней индексации?! И все же я в ступоре о_О
    Чувствую себя оленем в свете фар...
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0612 ]   [ 15 queries used ]   [ Generated: 19.03.19, 23:40 GMT ]