0

我是 dot.net 的初学者,任何人都可以建议我如何删除获取的下拉列表中的特定值。

这里为什么我提到 fetched 意味着下拉列表是使用 sql 从表生成或从表中获取的。

sqlquery=SELECT DISTINCT rtrim(ltrim(C.Cust_name)) as Cust_name FROM table1 A inner join table2 B on A.cust_code = B.Cust_Code
SqlCommand cmd = new SqlCommand(sqlquery, conn);
            SqlDataReader sr = cmd.ExecuteReader();

        while (sr.Read())
        {
            {
                cmb_cust.Items.Add(sr["Cust_name"].ToString());
            }
        }

foreach (ListItem li in cmb_cust.Items)
            {
              {
                    if (li.Value == "value1")
                        cmb_cust.Items.Remove(li);
                }
            }

如果我处理上述语句我面临的集合被修改枚举操作可能无法执行,我可以获得任何其他解决方案,例如将列表交换为临时列表并处理操作。从 sql 获取后我不需要value1 。

4

3 回答 3

2

甚至比事后删除该项目更好,首先不要添加它。

while (sr.Read())
{
    var txt = sr["Cust_name"].ToString();
    if (txt != "value1")
       cmb_cust.Items.Add(txt);
}

或者您可以在 SQL 查询中排除它。

SELECT tbl1.Cust_name 
FROM
(
  SELECT DISTINCT rtrim(ltrim(C.Cust_name)) as Cust_name 
  FROM table1 A 
  inner join table2 B on A.cust_code = B.Cust_Code
) As tbl1
where 
tbl1.Cust_name != 'value1'

您收到该异常的原因是您无法在枚举集合时从集合中删除项目。如果你想删除一个项目,你应该写:

cmb_cust.Items.Remove("value1");
于 2015-05-15T13:05:58.047 回答
1

比在添加过程中跳过它更好的是根本不从数据库中获取它:

sqlquery = @"SELECT DISTINCT rtrim(ltrim(C.Cust_name)) as Cust_name 
 FROM table1 A inner join table2 B on A.cust_code = B.Cust_Code 
 WHERE Cust_name <> 'value1'";

;-)

于 2015-05-15T13:09:47.603 回答
0

您不能使用foreach循环修改集合。将其更改为for循环,这应该可以工作。

于 2015-05-15T13:08:43.567 回答