Datatable - SelectedIndex в Combobox - PullRequest
       49

Datatable - SelectedIndex в Combobox

1 голос
/ 23 марта 2020

Можно ли добавить selectedIndex для комбинированного списка в dataTable в l oop?

 DataGridViewComboboxColumn dataGrid = new DataGridViewComboboxColumn();
 datagrid.Datasource = enumData; //this works 
 datagrid.Name = "cmb"

 Datatable dt = new DataTable();
 dt.Columns.Add("cmb");
 for(int i = 0, i<200, i++)
 {
    var data = GetData(i);
    DataRow r =new DataRow();
    r["cmb] = data.value; //selectedIndex??

 }

1 Ответ

1 голос
/ 23 марта 2020

Если вы используете сетку данных, привязанную к таблице данных, вы не будете связываться с отдельными полями со списком в сетке. Вы делаете что-то вроде этого (я включу установочный код):

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);
...