(с помощью C# Visual Studio 2015, Windows Forms)Копировать ComboBox Dataset в DataGridViewComboBoxColumn
У меня есть список строк, которые я хочу показать в DataGridView (DGV).
Каждая строка в DGV будет иметь:
- столбец [0]: строковое значение из списка (ColumnType: DataGridViewTextBoxColumn)
- колонка [1]: пустая ячейки (пользователь будет вводить данные здесь) (ColumnType: DataGridViewTextBoxColumn)
- колонка [2]: выпадающий (ColumnType: DataGridViewComboBoxColumn)
Каждый ComboBox в каждой записи будет иметь одинаковые элементы (тот же DataSet), и я извлекаю их из SQL-запроса в мою базу данных доступа (accdb).
Моя основная проблема заключается в том, что мне нужно идентифицировать ValueMember
и DisplayMember
каждого ComboBox, и я не могу понять, как это сделать. Мой текущий код просто пытается скопировать DataTable results
в ComboBox, но я получаю сообщение об ошибке: System.ArgumentException.DataGridViewComboBoxCell value is not valid.
И это повторяется для каждого значения каждого ComboBox в DataGridView. Я не могу понять, что я делаю неправильно.
Любая помощь была бы принята с благодарностью. Вот код:
DataTable results = new DataTable();
//Identify the Connection String
connection.ConnectionString = dbQuery.connStr;
//SQL Statement to retrieve ComboBox Items
string sql = @"SELECT ID, DESCRIP FROM tbl_setpoints_categories ORDER BY DESCRIP ASC";
//Create a new ComboBox (this is for testing purposes)
ComboBox cb = new ComboBox();
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = sql;
OleDbDataReader reader = command.ExecuteReader();
results.Columns.Add("ID", typeof(int));
results.Columns.Add("DESCRIP", typeof(string));
results.Load(reader);
//For testing purposes...
cb.ValueMember = "ID";
cb.DisplayMember = "DESCRIP";
cb.DataSource = results;
if (!reader.IsClosed)
{
reader.Close();
}
}
finally
{
connection.Close();
}
//Loop through the list and add each into an array of objects
//This array will be added as a DataGridView row
foreach (string spName in spList)
{
//My Latest Edit, but still produces same error
DataGridViewComboBoxCell cbCell = new DataGridViewComboBoxCell();
cbCell.ValueMember = "ID";
cbCell.DisplayMember = "DESCRIP";
cbCell.DataSource = results;
//End Latest Edit
object[] row = new object[3];
row[0] = spName.ToString();
row[1] = "";
row[2] = cbCell; //From Latest Edit (was: results)
dataGridView1.Rows.Add(row);
}
EDIT: Я только что проверил, чтобы увидеть, если мой запрос тянул записи, добавив следующую строку:
MessageBox.Show(results.Rows.Count.ToString());
И я получил правильное число записей
Возможный дубликат http://stackoverflow.com/questions/654829/datagridviewcomboboxcell-binding-value-is-not-valid –