Если вы используете сетку данных, привязанную к таблице данных, вы не будете связываться с отдельными полями со списком в сетке. Вы делаете что-то вроде этого (я включу установочный код):
DataTable sourceData = new DataTable();
sourceData.Columns.Add("Name");
sourceData.Columns.Add("Gender", typeof(int));
sourceData.Rows.Add("John", 1);
sourceData.Rows.Add("Jane", 2);
sourceData.Rows.Add("Xxxx", 3);
DataTable comboData = new DataTable();
comboData.Columns.Add("Disp");
comboData.Columns.Add("Valu", typeof(int));
comboData.Rows.Add("Male", 1);
comboData.Rows.Add("Female", 2);
comboData.Rows.Add("Unspecified", 3);
А теперь о гайках и болтах этого:
dataGridView1 = new DataGridView();
dataGridView1.DataSource = sourceData;
//binding the dgv will create a couple of textbox columns,
//now let's add a combo column to demo the binding concept
DataGridViewComboboxColumn dgvcbcGender = new DataGridViewComboboxColumn();
dgvcbcGender.Datasource = comboData; //refers to the male/female/unspecified table
dgvcbcGender.DisplayMember = "Disp"; //show john/jane/Xxxx in the combo
dgvcbcGender.ValueMember = "Valu"; //use the 1/2/3 ints as values to be stored in the sourceData table
dgvcbcGender.DataPropertyName = "Gender"; //critical! == "read the `Gender` int value of the row in `sourceData`, look it up in the `Valu` column of `comboData`
Это последняя строка, которая соединяет список элементов в комбо с данными в основной таблице. Когда связывание выполняется таким образом, мы вообще не связываемся с каким-либо списком selctedIndex; Комбо отобразит Мужской / Женский / Неуказанный, связанный с 1/2/3, который он находит в базовой строке (sourceData.Gender
) - он делает это путем поиска значения 1/2/3 в столбце comboData.Valu
. Когда вы устанавливаете новый пол, он извлекает соответствующее SelectedValue из comboData.Valu
и сохраняет его обратно в строке. У вас есть другой столбец, связанный с sourceData.Gender
- он также изменится, когда вы измените настройку в поле со списком (возможно, придется перейти к другой строке)
Теперь просто убедитесь, что вы добавили столбец в представление данных:
dataGridView1.Columns.Add(dgvcbcGender);