访问dataGridView列中的组合框



我正在做一个调度程序,在dataGridView中,我们有几个组合框列,在创建时由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");
}

<

评论反应/strong>

如何更改组合框的选定索引编辑是在什么时候触发的?[…我们想要它,以便当新的项目

我想到了几个方法。

  1. 在上述代码的if-statement中添加一行。这将为DataGridViewComboBoxColumn中的每个DataGridViewComboBoxCell设置默认显示值。

    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实际上是 设置为新的用户值
    • 缺点:逻辑决定哪些细胞应该受到影响比较复杂。

最新更新