访问 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 列中的组合框?的主要内容,如果未能解决你的问题,请参考以下文章