Привязка DataGridView к DataTable, а также включение ComboBox в качестве последнего столбца - PullRequest
2 голосов
/ 13 октября 2009

Прямо сейчас у меня есть DataGridView, который привязан к DataTable, который работает все хорошо и хорошо. Что мне нужно сделать в DataGridView, так это включить новый столбец в самом конце, который представляет собой ComboBox, который будет динамически заполняться на основе значения ключа строки.

Мои столбцы: ID, Имя и Количество. 4-й столбец будет ComboBox, который берет идентификатор и создает значения в раскрывающемся списке на основе этого. В настоящее время у меня есть пользовательский ComboBox, который берет идентификатор в своем конструкторе и заполняет его таким образом, но я не мог найти способ вставить это в DataGridView. Итак, я создал копию этого пользовательского элемента управления ComboBox и превратил его в DataGridViewComboBoxCell, но я все еще не могу понять, как динамически связать его с формой. Я искал в Интернете и нашел несколько примеров, но не совсем то, что я хочу сделать.

Эта ссылка показывает, что я хочу делать, за исключением того, что я использую C #, а не VB. Есть идеи?

Ответы [ 3 ]

3 голосов
/ 13 октября 2009

Вот что я только что попробовал:

DataTable dt = new DataTable();
            dt.Columns.Add("Col");
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows[0][0] = "1";
            dt.Rows[1][0] = "2";
            dt.Rows[2][0] = "3";
            dataGridView1.DataSource = dt;

            dataGridView1.Columns.Add(new DataGridViewComboBoxColumn());

            List<string> lstStr = new List<string>();
            lstStr.Add("1");
            lstStr.Add("2");
            lstStr.Add("3");
            lstStr.Add("4");

            ((DataGridViewComboBoxCell)(dataGridView1.Rows[0].Cells[1])).DataSource = lstStr;

Это то, что вы ищете?

2 голосов
/ 18 ноября 2009

Попробуйте это:

// Create a new Combo Box Column

DataGridViewComboBoxColumn EmpIdColumn = new DataGridViewComboBoxColumn();

// Set the DataSource of EmpIdColumn as bellow

EmpIdColumn.DataSource = myDataSet.Tables[0];

// Set the ValueMember property as done bellow 

EmpIdColumn.ValueMember = myDataSet.Tables[0].Columns[0].ColumnName.ToString();

// Set the DisplayMember property as follow

EmpIdColumn.DisplayMember = EmpIdColumn.ValueMember;
0 голосов
/ 13 октября 2009

Вы можете взять или оставить этот путь, но способ, которым я обработал это (в VB), состоит в том, чтобы связать DGV с коллекцией объектов, которая содержит некоторые дополнительные элементы выше и вне моих фактических связанных данных. Я использую эти дополнительные элементы в качестве заполнителей для дополнительного материала.

Я заполняю элементы из источника данных (в моем случае БД) в коллекцию, заполняю другие элементы по мере необходимости, а затем связываю коллекцию с DGV. Поскольку дополнительные члены не являются членами исходной таблицы, я могу изменить их содержимое. Тогда мне не нужно иметь дело с «частичной привязкой» элемента управления, как вы хотите.

Во всяком случае, еще один способ снять кожу с кошки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...