2015-05-15 60 views
0

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

这里为什么我提到抓取意味着dropdownlist是使用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); 
       } 
      } 

如果我处理我面临收集上述说法进行了修改枚举操作可能不会执行,我可以得到任何其他解决方案一样swaping列表来临时名单和处理操作。在从sql中读取数据后,我不需要value1

回答

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"); 
+0

我想,这就是答案。 – J3soon

0

你不能foreach循环修改集合。将其更改为for循环,并且应该可以工作。

+0

谢谢我会尽量使用并回复你 –

+0

要点是,你不需要循环**项**,以删除特定条目。直接使用** cmb_cust.Items.Remove(“value1”); **和Bob的叔叔。 – LocEngineer

+0

@LocEngineer的确如此。出于另一个原因,指出正确的迭代方法以便将来参考以防止迭代和修改。 – Sami

1

甚至比在增加过程中跳过它更好不是从DB在所有取,

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'"; 

;-)

+0

我知道巴迪,但我需要通过这种方法删除。 –