访问 dataGridView 列中的组合框?
Accessing a Combobox inside a dataGridView Column?
我正在开发一个调度程序,在 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");
}
评论回复
how could you change the selected index of that combobox (the one that
the edit was triggered on)? [...] we want it so that when the new item
is added the selected index is set to that new item).
想到了几种方法。
在上述代码的if-statement
中添加一行。这将为 DataGridViewComboBoxColumn
.
中的每个 DataGridViewComboBoxCell
设置默认显示值
if (comboboxColumn != nullptr)
{
comboboxColumn->Items->Add("the new user entry");
comboboxColumn->DefaultCellStyle->NullValue = "the new user entry";
}
- 优点:干净、高效。之前用户选择的值保持不变。如果没有进行其他选择,单元格的
FormattedValue
将默认显示新的用户值。
- 缺点:实际上 不会设置单元格的选定值,因此
Value
将 return 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
实际上 设置为新用户值。
- 缺点:决定哪些 细胞应该受到影响的逻辑更复杂。
我正在开发一个调度程序,在 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");
}
评论回复
how could you change the selected index of that combobox (the one that the edit was triggered on)? [...] we want it so that when the new item is added the selected index is set to that new item).
想到了几种方法。
在上述代码的
中的每个if-statement
中添加一行。这将为DataGridViewComboBoxColumn
.DataGridViewComboBoxCell
设置默认显示值if (comboboxColumn != nullptr) { comboboxColumn->Items->Add("the new user entry"); comboboxColumn->DefaultCellStyle->NullValue = "the new user entry"; }
- 优点:干净、高效。之前用户选择的值保持不变。如果没有进行其他选择,单元格的
FormattedValue
将默认显示新的用户值。 - 缺点:实际上 不会设置单元格的选定值,因此
Value
将 returnnull
在单元格上未明确用户-已选中。
- 优点:干净、高效。之前用户选择的值保持不变。如果没有进行其他选择,单元格的
实际上将某些单元格的值(根据您的条件)设置为用户附加值。
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
实际上 设置为新用户值。 - 缺点:决定哪些 细胞应该受到影响的逻辑更复杂。
- 优点:目标单元格的