Выпадающее поле Combobox внутри datagridview
я слишком долго боролся с этой проблемой, я видел все ответы на этот вопрос, и хотя я нашел несколько, ни один из них, похоже, не работает для меня. Таким образом, основа моей проблемы заключается в следующем: у меня есть DataGridView
это добавит строку к себе еще раз DataGridView
клетка двойном щелчке. Когда это DataGridView
получает строку добавлена, она добавляет 2 типа столбцов к себе один является ComboBox
, в котором suposedly уже установлен colection (просто пошел в ComboBox
параметры внутри datagrid и заполнил свою коллекцию) и столбец флажка, теперь оба они ничего не делают, как только я нажимаю на них, Doble clic, несколько кликов, сколько хотите, но ничего не происходит. Я даже попробовал следующий код.
public static void combolist(DataGridView combogrid)
{
var column = new DataGridViewComboBoxColumn();
DataTable data = new DataTable();
data.Columns.Add(new DataColumn("Value", typeof(string)));
data.Columns.Add(new DataColumn("Description", typeof(string)));
data.Rows.Add("item1");
data.Rows.Add("item2");
data.Rows.Add("item3");
column.DataSource = data;
column.ValueMember = "Value";
column.DisplayMember = "Description";
combogrid.Columns.Add(column);
}
и хотя я могу добавить новый столбец типа ComboBox
мой DataGridView
он по-прежнему пуст(или кажется, так как я не могу щелкнуть, чтобы увидеть выпадающий список). мои данные DataGridView
свойства gridview имеют значение:
editMode:editOnEnter, только чтение: false.
я что-то упускаю? почему я не могу заполнить или отобразить это ComboBox
? эта проблема плз сводит меня с ума, и я считаю, что это лучший сайт, чтобы найти ответ. Я был бы очень признателен... много.
хорошо, поэтому мне определенно нужно увидеть проблему с другой точки зрения, я даже попытался связать ComboBox
к источнику данных и по-прежнему ничего не отображает! хотя тот же источник данных привязан к нормальному ComboBox
получает желаемый результат
DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(combogrid.Rows[0].Cells[2]);
ComboColumn.DataSource = class.details.GetData();
ComboColumn.DisplayMember = "name";
есть ли какой-то базовый шаг, который мне не хватает при работе с ComboBox
внутри DataGridView
?
3 ответов
мысли:
-
я протестировал ваш код, опубликованный в visual studio 2012, и выполнил код, нажав на
Button
пустаяDataGridView
. Это сработало для меня, потому что я получилDataGridComboBoxColumn
имеющегоComboBox
С тремя пустыми записями. Я расширил код, как показано ниже, и получил три именованные записи:data.Columns.Add(new DataColumn("Value", typeof(string))); data.Columns.Add(new DataColumn("Description", typeof(string))); data.Rows.Add("item1"); data.Rows[data.Rows.Count - 1].SetField("Value", "value1"); data.Rows[data.Rows.Count - 1].SetField("Description", "description1"); data.Rows.Add("item2"); data.Rows[data.Rows.Count - 1].SetField("Value", "value2"); data.Rows[data.Rows.Count - 1].SetField("Description", "description2"); data.Rows.Add("item3"); data.Rows[data.Rows.Count - 1].SetField("Value", "value3"); data.Rows[data.Rows.Count - 1].SetField("Description", "description3"); column.DataSource = data;
кажется, что ваш код просто добавляет строку с именем "item1 / 2 / 3" или строку, которая только что получила первый столбец ("значение", которое не является вашим displayvalue), заполненный заданным значением для datatable, не имеющего значений, которые могут быть отображены. В конце концов, я не смог воспроизвести вашу проблему невозможности открыть раскрывающийся список (обратите внимание, что я использовал пустое
DataGridView
потому что я не знаю, что у тебя есть вDataGridView
). Я не знаю, является ли опубликованный код именно тем кодом, с которым у вас возникли проблемы. Но вы пишете, что вы добавляете строку в свой
DataGridView
когда ячейка нажата и когда в этом случае вы добавляете два столбца. Вы хотите сказать, что добавляете для каждой добавленной строки два столбца в сетку или просто хотите сказать, что строка состоит из этих двух столбцов?
Если последний из них прав, мне кажется, что это аналогичная проблема, как с размещенным кодом. Вы рассматривали возможность создания строки вручную с добавлениемDataGridViewComboBoxCell
иDataGridViewCheckboxCell
? У нас тихий сложныйDataGridViewUserControl
где мы динамически добавлять различные celltypes и не имеют проблемы с получением их правильно отображается. Но мы создаем все строки вручную, заполняя желаемые типы ячеек вручную в строки и не указывая тип для столбца.
вы добавляете 2 столбца в datatable и заполняете только элемент value. Попробуйте это
var column = new DataGridViewComboBoxColumn();
DataTable data = new DataTable();
data.Columns.Add(new DataColumn("Value", typeof(string)));
data.Columns.Add(new DataColumn("Description", typeof(string)));
data.Rows.Add("item1","123");
data.Rows.Add("item2","234");
data.Rows.Add("item3","245");
column.DataSource = data;
column.ValueMember = "Value";
column.DisplayMember = "Description";
dataGridView1.Columns.Add(column);
это потому, что ваш DataTable
и 2 columns
. Но вы добавляете только значения для ячеек в столбце 1
ячейки в столбце 2 (который будет использоваться как DisplayMember
вашего comboBox
) иметь пустые значения. Попробуйте вместо этого:
//.....
data.Rows.Add("item1","This is Item1");
data.Rows.Add("item2","This is Item2");
data.Rows.Add("item3","This is Item3");
//.....