Доступ к Combobox внутри столбца dataGridView?

Я работаю над программой планирования, и внутри dataGridView у нас есть несколько столбцов ComboBox, которые заполняются 3 записями при создании, но я хотел иметь возможность добавлять больше по мере их создания пользователем, но я понятия не имею, как Вы получите доступ к данным в выпадающем списке. Любая помощь приветствуется!

// this is initialized in a separate part.
/* System::Windows::Forms::DataGridView^ dataGridView;*/

System::Windows::Forms::DataGridViewComboBoxColumn^ newCol =
(gcnew System::Windows::Forms::DataGridViewComboBoxColumn());

dataGridView->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewComboBoxColumn^  >(1) {newCol});

// add the choices to the boxes.
newCol->Items->AddRange("User inputted stuff", "More stuff", "Add New...");

0

Решение

Решение

Если у вас есть доступ к данным из пользовательской записи, и вы знаете индекс столбца для DataGridViewComboBoxColumnвы должны иметь возможность просто делать следующее, где это необходимо:

DataGridViewComboBoxColumn^ comboboxColumn = dataGridView->Columns[the_combobox_column_index];

if (comboboxColumn != nullptr)
{
comboboxColumn->Items->Add("the new user entry");
}

Комментарии Ответ

как вы можете изменить выбранный индекс этого списка (тот, который
редактирование было запущено)? […] мы хотим, чтобы, когда новый элемент
добавлен выбранный индекс для этого нового элемента).

На ум приходит пара способов.

  1. Добавьте одну строку в пределах if-statement вышеуказанного кода. Это установит значение по умолчанию для каждого DataGridViewComboBoxCell в DataGridViewComboBoxColumn,

    if (comboboxColumn != nullptr)
    {
    comboboxColumn->Items->Add("the new user entry");
    comboboxColumn->DefaultCellStyle->NullValue = "the new user entry";
    }
    
    • Плюсы: чисто, эффективно. Предыдущие выбранные пользователем значения оставил нетронутым. Клетки FormattedValue будет отображать новое пользовательское значение по умолчанию, если не было сделано никакого другого выбора.
    • Минусы: не на самом деле установить выбранное значение ячейки, так Value вернусь null в ячейках, не выбранных пользователем.
  2. На самом деле задавать стоимость определенных ячеек (в зависимости от ваших критериев) до добавленной пользователем стоимости.

    if (comboboxColumn != nullptr)
    {
    comboboxColumn->Items->Add("the new user entry");
    
    for (int i = 0; i < dataGridView->Rows->Count; i++)
    {
    DataGridViewComboBoxCell^ cell = dataGridView->Rows[i]->Cells[the_combobox_column_index];
    
    if ( cell != nullptr /* and your conditions are met */ )
    {
    cell->Value = "the new user entry";
    }
    }
    }
    
    • Плюсы: Value целевых клеток на самом деле установить новое значение пользователя.
    • Минусы: логика решения который клетки должны быть затронуты более сложным.
1

Другие решения