第一组结果后组合框的数量增加

Posted

技术标签:

【中文标题】第一组结果后组合框的数量增加【英文标题】:Number of comboboxes increase after the first set of results 【发布时间】:2014-09-05 14:35:06 【问题描述】:
I am populating my datagrid based on a value in the textbox.

我的网格视图中的一个字段值是一个组合框。在特定的文本框条目上,它会显示正确的结果,但是当我在文本框中给出另一个值时,组合框会增加其数量,这意味着如果我输入 100 ,数据在我的组合框中正确填充,但是对于接下来提供的任何值,组合框的数量变为 2。我不知道为什么会发生这种情况。这是按钮单击的代码。请帮忙

 DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn();
 combo.HeaderText = "Supplier";
 //execute sql data adapter to get supplier values
 DataTable dt = obj.SqlDataTable("select name1 from blahblah");
 //foreach (DataRow supplier in dt.DataSet.Tables[0].Rows)
 //
 //    combo.Items.Add(supplier[0]);
 //
 //dataGridView1.Columns.Add(combo);
   foreach (DataRow row in dt.Rows)
   
    combo.Items.Add(row["NAME1"].ToString());
    
    dataGridView1.Columns.Add(combo);

【问题讨论】:

【参考方案1】:

您在每次点击时都会添加一个新的组合框...而不是检查是否已添加组合框列,如果已存在则适当修改其内容。

要进行此项检查,请将您的组合框列命名为:

    combo.Name = "Supplier";

name 属性不会显示在 UI 中,但 Windows 窗体会记住它。然后,您可以测试您的列是否已添加:

  if (!dataGridView1.Columns.Contains("Supplier"))

【讨论】:

当我调试时,它总是显示 index value = -1 if (dataGridView1.Columns.IndexOf(combo) 对...您正在测试的组合框尚未添加到网格中。我将在我的答案中添加一个示例测试 感谢您的回复。如果它没有被添加到网格中,为什么当我运行并正确填充数据库中的值时它会出现在网格中? 当您使用 new DataGridViewComboBoxColumn() 创建列时,它不是该代码行中网格的一部分。当你测试它是否被添加时,新列还没有被添加,即使网格中还有其他具有相似特征的列。 嗯嗯嗯..你能提出一些解决这个问题的建议吗?【参考方案2】:

我不确定文本框,但每次单击时,都会在网格中添加一个新的DataGridViewComboBoxColumn。如果单击 5 次,您将看到 5 个 DataGridViewComboBoxColumns,下拉列表是 sql 查询的结果。

您需要检查DataGridViewComboBoxColumns combo 是否已添加:

if (dataGridView1.Columns.IndexOf(combo) < 0)

   // Add

【讨论】:

按回车键或btn提交组合框的数量不断增加。 if (dataGridView1.Columns.IndexOf(combo) 如果你在dataGridView1.Columns.Add(combo);之前给dataGridView1.Columns.IndexOf(combo)添加断点,你会得到什么值? 我通过在此处添加断点进行调试。但它总是显示 index = -1

以上是关于第一组结果后组合框的数量增加的主要内容,如果未能解决你的问题,请参考以下文章

选择项目后将多列组合框的值设置为所有列?

如何在 Access 中快速滚动并到达组合框的末尾

添加“---选择”作为第一项在组合框的窗户形式?

MS Access 如何使用带有组合框的宏?

单击保存按钮后如何在用户窗体中添加依赖于另一个组合框的excel vba组合框而不影响清除数据功能

根据第二个组合框的选择隐藏组合框项目,反之亦然