访问 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).

想到了几种方法。

  1. 在上述代码的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 在单元格上未明确用户-已选中。
  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 实际上 设置为新用户值。
    • 缺点:决定哪些 细胞应该受到影响的逻辑更复杂。