Поле со списком C# DataGridView добавляет данные программно

У меня есть приложение с DataGridView. Один из столбцов имеет тип Combobox. Я хочу добавить элементы для этого списка программно. Вот код, который я использую для этого:

this.dsStatussen = this.statussenMan.getAllStatussen();
        DataGridViewComboBoxColumn cd = (DataGridViewComboBoxColumn)this.dgvEenheden.Columns[3];
        cd.DataSource = dsStatussen;
        cd.DisplayMember = "statussen";
        cd.DataPropertyName = "sid";
        cd.ValueMember = "status";

Затем, когда я пытаюсь добавить строку, я получаю следующую ошибку: «Нет поля со статусом имени». Я перевел ошибку на английский, потому что у меня ошибка на голландском языке. Вот код, который я использую для добавления строк:

Eenheden eenhedenMan = new Eenheden(objEvenement.eid);
        DataSet EenhedenData = eenhedenMan.getAllEenheden();

        foreach (DataRow dr in EenhedenData.Tables[0].Rows)
        {
            dgvEenheden.Rows.Add(
                                    dr[0].ToString(), 
                                    dr[1].ToString(), 
                                    dr[2].ToString(), 
                                    Convert.ToInt32(dr[6]), 
                                    dr[3].ToString(), 
                                    dr[4].ToString(), 
                                    dr[5].ToString()
                                );
        }

Может ли кто-нибудь помочь мне понять, что я делаю неправильно? Я не могу найти это. Это первый раз, когда я использую DataGridView с выпадающими списками.


person Bernhard    schedule 07.09.2011    source источник
comment
Как на самом деле выглядит ваш DataSource? Одес имеет две колонки (статуссен и статус)??   -  person Mitja Bonca    schedule 07.09.2011
comment
Мой источник данных представляет собой набор данных с одной таблицей. В таблице действительно 2 столбца: sid и статус   -  person Bernhard    schedule 07.09.2011


Ответы (2)


по своему опыту я обнаружил, что все работает лучше, если вы привязываете его через источник привязки, а затем устанавливаете

bindingScource.dataScource.Rows.Add( 
                                    dr[0].ToString(),  
                                    dr[1].ToString(),  
                                    dr[2].ToString(),  
                                    Convert.ToInt32(dr[6]),  
                                    dr[3].ToString(),  
                                    dr[4].ToString(),  
                                    dr[5].ToString() 
                                ); 
person Steven Dall    schedule 07.09.2011
comment
Вы имеете в виду, что я должен напрямую привязывать данные из DataSet EenhedenData к DataGridView? Вот так: dgvEenheden.DataSource = EenhedenData.Tables[0]; Когда я это делаю, я получаю ту же ошибку: Нет поля со статусом имени. - person Bernhard; 07.09.2011
comment
Хорошо, у меня работает та часть, в которой статусы привязываются. Итак, в Combobox я вижу нужные мне элементы. Теперь у меня другая проблема. В строке данных, которую я добавляю, столбец 6 (dr[6]) имеет целочисленное значение, указывающее идентификатор статуса, который следует выбрать. Как я могу программно выбрать правильный элемент в поле со списком при добавлении строки? (Извините за двойной комментарий, но я не могу отредактировать первый) - person Bernhard; 07.09.2011
comment
Небольшая дополнительная информация: элементы в DataGridviewCombobox являются текстовыми, столбец в строке данных (dr[6]) является целым числом! - person Bernhard; 07.09.2011
comment
попробуйте Convert.ToInt32(dr[6].ToString()) - person Steven Dall; 12.09.2011

Выбрать правильную строку? Вы имеете в виду выбрать из раскрывающегося списка, чтобы увидеть строку внутри сетки данных?

 int index = dropdown.SelectedIndex();

 for(int count = 0; count < dgvEenheden.Rows.Count; count ++)
{
   if (dgvEenheden.Rows[count].Cells["<enter col name here>"].Value.ToString().equals(dropdown.Items[index].Text))
{
    dgvEenheden.Rows[count].Selected = true; //to select the Row
    dgvEenheden.Rows[count].Cells[<Cell Number>].Selected = true; //to select the specific Cell

}
}
person Steven Dall    schedule 12.09.2011