Я работаю над программой планирования, и внутри 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...");
Решение
Если у вас есть доступ к данным из пользовательской записи, и вы знаете индекс столбца для DataGridViewComboBoxColumn
вы должны иметь возможность просто делать следующее, где это необходимо:
DataGridViewComboBoxColumn^ comboboxColumn = dataGridView->Columns[the_combobox_column_index];
if (comboboxColumn != nullptr)
{
comboboxColumn->Items->Add("the new user entry");
}
Комментарии Ответ
как вы можете изменить выбранный индекс этого списка (тот, который
редактирование было запущено)? […] мы хотим, чтобы, когда новый элемент
добавлен выбранный индекс для этого нового элемента).
На ум приходит пара способов.
Добавьте одну строку в пределах if-statement
вышеуказанного кода. Это установит значение по умолчанию для каждого DataGridViewComboBoxCell
в DataGridViewComboBoxColumn
,
if (comboboxColumn != nullptr)
{
comboboxColumn->Items->Add("the new user entry");
comboboxColumn->DefaultCellStyle->NullValue = "the new user entry";
}
FormattedValue
будет отображать новое пользовательское значение по умолчанию, если не было сделано никакого другого выбора.Value
вернусь null
в ячейках, не выбранных пользователем.На самом деле задавать стоимость определенных ячеек (в зависимости от ваших критериев) до добавленной пользователем стоимости.
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
целевых клеток на самом деле установить новое значение пользователя.