На главную
ПРАВИЛА 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,0774 ]   [ 20 queries used ]   [ Generated: 16.12.18, 02:08 GMT ]