访问 dataGridView 列中的组合框?

Posted

技术标签:

【中文标题】访问 dataGridView 列中的组合框?【英文标题】:Accessing a Combobox inside a dataGridView Column? 【发布时间】:2015-06-04 11:51:28 【问题描述】:

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

【问题讨论】:

我很困惑。创建条目的不是用户您的应用程序代表用户执行此操作。我不知道您如何实现该功能,现在寻求帮助以实现相同的功能。我错过了什么? 在列内,有下拉组合框,当用户选择“添加新”时,会出现一个请求新输入的文本框。但是,当它输入时,我不知道如何将其添加到组合框中以供他们将来选择。 在开头显示你如何在ComboBoxColumn中添加项目 @Fabio 我添加了请求的代码。 【参考方案1】:

解决方案

如果您可以访问用户条目中的数据并且您知道DataGridViewComboBoxColumn 的列索引,那么您应该能够在需要时执行以下操作:

DataGridViewComboBoxColumn^ comboboxColumn = dataGridView->Columns[the_combobox_column_index];

if (comboboxColumn != nullptr)

    comboboxColumn->Items->Add("the new user entry");


评论回复

你怎么能改变那个组合框的选定索引(那个 编辑被触发)? [...] 我们希望这样当新项目 添加选定的索引设置为该新项目)。

我想到了几种方法。

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

    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实际上设置为新的用户值。 缺点:决定哪些单元应该受到影响的逻辑更加复杂。

【讨论】:

首先感谢您的回答。现在,鉴于comboboxColumn,您如何更改该组合框的选定索引(触发编辑的那个)? (我知道这不是问题的一部分,但我正在与 Ralis 合作项目,我们希望它在添加新项目时将所选索引设置为该新项目) @StephenB 编辑了我的答案以解决您的其他问题。希望有帮助。如果我误解了任何内容,请告诉我。 非常感谢,我认为这正是我们所需要的。当我星期一见到他时,我会确保 Ralis 接受这个答案。再次感谢!

以上是关于访问 dataGridView 列中的组合框?的主要内容,如果未能解决你的问题,请参考以下文章

如何在datagridview组合框列中绑定数据

Datagridview 在更改列组合框值时执行代码

C#根据gridview组合框更改gridview列数据?

动态地将组合框单元添加到 datagridview

如何从访问数据库列中获取每个唯一值并添加到组合框项目

Datagridview 中的州、县和市级联组合框列