【问题标题】:Accessing a Combobox inside a dataGridView Column?访问 dataGridView 列中的组合框?
【发布时间】: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 我添加了请求的代码。

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


【解决方案1】:

解决方案

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

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

if (comboboxColumn != nullptr)
{
    comboboxColumn->Items->Add("the new user entry");
}

评论回复

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

我想到了几种方法。

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

【讨论】:

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