Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.184.90] |
|
Сообщ.
#1
,
|
|
|
Доброго дня вам друзья!
Начну с цели - хочу добавить в DataGridView некоторое кол-во Column, но не руками. получаю схему из БД: 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 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 (если я правильно понял) просто не существует. Пытаюсь написать преобразовалку: 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 надо заботиться о его внутренней индексации?! И все же я в ступоре о_О Чувствую себя оленем в свете фар... |