访问dataGridView列中的Combobox?

时间:2015-06-04 11:51:28

标签: c++ datagridview visual-c++-2010 datagridviewcombobox

我正在开发一个调度程序,在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..."); 

1 个答案:

答案 0 :(得分: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 实际设置为新用户值。
    • 缺点:判断哪些单元应受影响的逻辑更复杂。