2015-06-04 2 views
0

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

// 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

Я озадачен. Это не ** пользователь **, который создает записи. Это ** ваше приложение **, которое делает от имени пользователя. Я понятия не имею, как вы можете реализовать функциональность, и теперь просите о помощи в реализации той же функции. Что мне не хватает? – IInspectable

+0

Внутри столбцов находятся выпадающие выпадающие списки, а когда пользователь выбирает «Добавить новый», им предоставляется текстовое поле, которое запрашивает новый ввод.Однако, когда он вводится, я не знаю, как добавить это в поле со списком для их выбора в будущем. – Ralis

+0

Покажите, как вы добавляете элементы в 'ComboBoxColumn' в начале – Fabio

ответ

1

Решение

Если у вас есть доступ к данным записи пользователя, и вы знаете, индекс столбца для 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 целевых клеток фактически набор на новое значение пользователя.
    • Минусы: Логическое решение , которое должно быть подвержено воздействию ячеек, сложнее.
+0

Спасибо за ответ. Теперь, учитывая, что 'comboboxColumn', как вы могли бы изменить выбранный индекс этого combobox (тот, который был активирован для редактирования)? (Я знаю, что это не часть вопроса, но я работаю над проектом с Ralis, и мы хотим, чтобы при добавлении нового элемента выбранный индекс был установлен на этот новый элемент) – StephenButtolph

+0

@StephenB Отредактировал мой ответ для решения ваших дополнительных вопросов. Надеюсь, это поможет. Дайте мне знать, если я что-то неправильно истолковал. – OhBeWise

+0

Большое спасибо, я думаю, это именно то, что нам нужно. Я убеждаюсь, что Ралис принимает этот ответ, когда я вижу его в понедельник. Еще раз спасибо! – StephenButtolph

Смежные вопросы