【问题标题】:How to remove values from valuemember in combobox?如何从组合框中的值成员中删除值?
【发布时间】:2014-06-09 20:46:17
【问题描述】:

以下代码更新填充组合框 cmbBox1。

OracleDataAdapter oraAdapter = new OracleDataAdapter(oraCmd);
DataSet oraDataSet = new DataSet();
oraAdapter.Fill(oraDataSet);

cmbBox1.ValueMember = oraDataSet.Tables[0].Columns["Val1"].ToString();

cmbBox1.DisplayMember = oraDataSet.Tables[0].Columns["Disp1"].ToString();
cmbBox1.DataSource = oraDataSet.Tables[0];

我需要帮助来弄清楚如何从 cmbBox1 中删除几个值。 我是从 ValueMember/DisplayMember 中删除值还是有什么方法可以隐藏 cmbBox1 中的值? 请指教

【问题讨论】:

  • oraDataSet.Tables[0].Rows.RemoveAt(cmbBox1.SelectedIndex);删除行
  • 是否可以从组合框中删除行而不是从数据集中删除?
  • 不要使用数据源。 cmbBox1.Items.Add(...); 但我不知道你为什么要避免从表中删除行。
  • 用户在下拉菜单中看到完整的文本:Text1、Text2、Text3,当他们选择一个项目时,选择的项目被读回并保存为短文本,例如:T1、T2、T3。我想我必须在方法之外声明 oraDataSet 并进行更改。谢谢@LarsTech

标签: c# .net winforms combobox valuemember


【解决方案1】:

您可以使用DataView

DataView dv = oraDataSet.Tables[0].DefaultView;
dv.RowFilter = "Code NOT IN (1,2,3)";

cmbBox1.ValueMember = oraDataSet.Tables[0].Columns["Val1"].ColumnName;

cmbBox1.DisplayMember = oraDataSet.Tables[0].Columns["Disp1"].ColumnName;
cmbBox1.DataSource = dv;

【讨论】:

  • dv.RowFilter = "代码不在 (1,2,3)";这是如何使用的?可以举个例子吗?
  • 我想通了 dv.RowFilter = "VALUE IN ('AFTER', 'BEFORE', 'ON')";
  • 非常感谢@fairybot
【解决方案2】:

我建议按照以下方式使用 OracleDataReader

con.Open();
var cb1 = new OracleCommand(string, con);
OracleDataReader dr1 = cb1.ExecuteReader();

while (dr1.Read())
{
     cmbBox1.Items.Add(dr1["Val1"] + ", " + dr1["Val2"]);
     // no need to assign DisplayMember and ValueMember

}
dr1.Close();
dr1.Dispose();
con.Close();

要删除包含特定值的项目,您可以使用:

cmbBox1.Items.Remove("yourText");

【讨论】:

  • 我尝试使用您的方法。我想在组合框下拉列表中显示 Val2,当用户从组合框中选择一个项目时,我想将它与 Val1 匹配并将值保存在 Val1 中。您建议的方法将项目显示为“Val1 Val2”。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
相关资源
最近更新 更多