2017-01-12 5 views
0

У меня есть datagridview в приложении для Windows. Datagridview имеет 3 колонки. Первый столбец - Combobox. Я пытаюсь добавить элемент в поле Combo, но он работает. Вот код (язык C#)Добавить элементы в combobox в уже существующем столбце comboBox datagridview

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 вполне допустимо и в основном позволяет помещать поле со списком в любую ячейку «SINGLE». Тем не менее, он работает, если использовать этот способ, вызывает сомнение в использовании поля со списком.

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

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

Если был «Пол» массив, который занимал эту информацию, а затем, когда код устанавливает это значение (мужчины, женщины) в строке кода выше комбо box box автоматически установит для этого значения поле со списком. Данные будут только «один» (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]); 
} 

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

+0

Большое спасибо JohnG –

Смежные вопросы