Выпадающее поле 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 ответов


мысли:

  1. я протестировал ваш код, опубликованный в 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).

  2. Я не знаю, является ли опубликованный код именно тем кодом, с которым у вас возникли проблемы. Но вы пишете, что вы добавляете строку в свой 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");
//.....