Я пытаюсь добавить раскрывающийся список во все ячейки для столбца в datagridView в моем приложении Winforms. Я создал представление программно, перетащив dgv в форму и добавив столбцы при создании класса.
Выпадающий список появляется в моем столбце DGV, однако, когда я нажимаю на список, ничего не открывается - я не уверен, заполнен ли ComboBox и не открывается, или он просто не содержит значений для пользователя Выбрать. Наведя курсор на объект при добавлении поля со списком в ячейку, я могу увидеть массив элементов, заполненный моими значениями.
Пожалуйста, сообщите, как я могу позволить пользователю выбирать значения в ячейке, которые заполняются из моих list
DataGridViewTextBoxColumn diffKey = new DataGridViewTextBoxColumn();
DataGridViewComboBoxColumn matchDesc = new DataGridViewComboBoxColumn();
DataGridViewTextBoxColumn permDiff = new DataGridViewTextBoxColumn();
grdEditAnnot.Columns.Add(diffKey);
grdEditAnnot.Columns.Add(matchDesc);
grdEditAnnot.Columns.Add(permDiff);
DataGridViewComboBoxCell matchDescDropbox = new DataGridViewComboBoxCell();
List<string> lstMatchDesc = new List<string>();
LoadMatchDescriptions(out lstMatchDesc);
foreach (string ddlItem in lstMatchDesc)
{
matchDescDropbox.Items.Add(ddlItem);
}
grdEditAnnot.Rows.Add(2);
matchDescDropbox.DataSource = GetMatchDescDDL(); // Bind combobox with datasource.
matchDescDropbox.ValueMember = "Description";
matchDescDropbox.DisplayMember = "Description";
grdEditAnnot.Rows[0].Cells[1] = matchDescDropbox;
}
private DataTable GetMatchDescDDL()
{
DataTable l_dtDescription = new DataTable();
l_dtDescription.Columns.Add("Description", typeof(string));
List<string> matchDescLst;
if (LoadMatchDescriptions(out matchDescLst) == 0)
{
foreach(string matchDesc in matchDescLst)
{
l_dtDescription.Rows.Add(matchDesc);
}
}
return l_dtDescription;
}
private int LoadMatchDescriptions(out List<string> matchDscLst)
{
//string SQL = SQL USED TO POPULATE MY LIST
//a temporary list of test strings would work to show how to get this to work... ex: list of test1, test2, test3 etc
try
{
matchDscLst = new List<string>();
rdr.ExecuteSQL(SQL);
while ((rec = rdr.FetchNextRecord()) != null)
{
matchDscLst.Add(rec.GetStringVal(0));
}
return 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Loading Match Descriptions", MessageBoxButtons.OK, MessageBoxIcon.Error);
matchDscLst = new List<string>();
return -1;
}
}
Это моя первая публикация на StackOverflow; извиняюсь, если это не в лучшем формате или нам нужна дополнительная информация ..
Результат кода: Созданная сетка; пользователь не может открыть comboBox или ввести столбцы текстового поля