Добавить элементы в выпадающий список в уже существующей колонке комбинированного списка

У меня есть представление данных в моем приложении Windows. DataGridView имеет 3 столбца. Первый столбец - это Combobox. Я пытаюсь добавить элемент в поле со списком, но он работает. Вот код (язык C#)

    foreach (int counter=0; counter<5; counter++ )
        {
        this.dataGridView1.Rows.Add();

        DataGridViewComboBoxCell cbCell = new DataGridViewComboBoxCell();
        cbCell.Items.Add("Male");
        cbCell.Items.Add("Female");                 
        dataGridView1.Rows[counter].Cells[0] = cbCell;

        dataGridView1.Rows[counter].Cells[1].Value = firstname[counter];

        dataGridView1.Rows[counter].Cells[2].Value = lastname[counter];                    

    }

Сетка показывает 5 строк. Но в первом столбце поля со списком нет элементов в каждом из них.

Пожалуйста помоги. Благодарю.

1 ответ

Поскольку код не показывает, как строятся столбцы, трудно сказать, в чем может быть проблема, однако код не использует DataGridViewComboBoxColum, DataGridViewComboBoxColumn это все, что нужно, чтобы каждая строка в столбце 0 была комбинированной с выбором "Мужской", "Женский".

Деформированный foreach цикл неправильный и не скомпилируется. Я предполагаю for петля это то, что вы искали. Следуя этому for цикл... новая строка правильно добавлена ​​в сетку. Тогда новый DataGridViewComboBoxCell создается и добавляется ячейка [0] текущей строки. dataGridView1.Rows[counter].Cells[0] = cbCell;, Эта ячейка [0] добавляется в каждую новую строку.

Это не нужно, если DataGridViewViewComboBoxColumn настроен правильно. Добавление DataGridViewComboBoxCell является абсолютно допустимым и в основном позволяет поместить поле со списком в любую "ОДНУ" ячейку. Это работает, однако, если использование этого способа делает использование самого поля со списком сомнительным.

Цикл "добавляет" данные в dataGridView1, Когда вы читаете данные, часть "Пол" (мужской, женский), кажется, отсутствует, поэтому значение не установлено, как и другие значения. Пример: нет такой строки, как показано ниже:

dataGridView1.Rows[counter].Cells[0].Value = gender[counter];

Если был массив "Gender", в котором содержалась эта информация, то когда код устанавливает это значение (Male, Female) в строке кода над столбцом поля со списком, он автоматически установит выбор поля со списком на это значение. Данные будут только "одним" (1) из двух значений.

Предполагая, что это то, что вы ищете, код ниже демонстрирует, как использовать DataGridViewComboBoxColumn

Предупреждение при чтении данных в ячейку поля со списком; если строковые данные для столбца поля со списком НЕ совпадают с одним из элементов в списке элементов поля со списком, код будет аварийно завершен, если его не перехватить и не обработать. Если значение является пустой строкой, то поле со списком установит выбранное значение пустым.

// Sample data
string[] firstname = { "John", "Bob", "Cindy", "Mary", "Clyde" };
string[] lastname = { "Melon", "Carter", "Lawrence", "Garp", "Johnson" };
string[] gender = { "Male", "", "Female", "", "Male" };
// Create the combo box column for the datagridview
DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn();
comboCol.Name = "Gender";
comboCol.HeaderText = "Gender";
comboCol.Items.Add("Male");
comboCol.Items.Add("Female");
// add the combo box column and other columns to the datagridview
dataGridView1.Columns.Add(comboCol);
dataGridView1.Columns.Add("FirstName", "First Name");
dataGridView1.Columns.Add("LastName", "Last Name");
// read in the sample data
for (int counter = 0; counter < 5; counter++ )
{
  dataGridView1.Rows.Add(gender[counter], firstname[counter], lastname[counter]);
}

Надеюсь это поможет.

Другие вопросы по тегам