在DropDownList选择中具有重复值会导致不匹配选择

时间:2012-08-14 16:10:47

标签: c# asp.net

我有一个DropDownList,它绑定到数据库。 DropDownList列表中的值可能类似于:

  

Bedroom1
     Bedroom2
     Kitchen1
     Kitchen2

如果这些项目在DropDownList中列出,选择了“Bedroom2”,则选择“Bedroom1”本身,但选择“Kitchen2”后,选择“Kitchen1”。

DropDownList进一步绑定到另一个DropDownList。我为DropDownList设置了AutoPostBack。我已经从代码中绑定了数据源。

可能出了什么问题?

数据绑定代码:

SqlDataAdapter myda = new SqlDataAdapter("Select * FROM " + Label3.Text, con);
DataSet ds = new DataSet();
myda.Fill(ds, "Table");
LOC_LIST2.DataSource = ds.Tables[0];
LOC_LIST2.DataTextField = ds.Tables[0].Columns["Location_Instance"].ColumnName.ToString(); 
LOC_LIST2.DataValueField=ds.Tables[0].Columns["Location_Type"].ColumnName.ToStri??ng(); 
LOC_LIST2.DataBind(); 
LOC_LIST2.Items.Insert(0, new ListItem("---Choose One Location---", "-1"));

因此,在上面的代码中,Location_Instance是添加并存储在数据库中的位置数(Location_Type),并且在上面的DropDownList中检索到相同的位置。

这是一个非常严重的问题,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果您在回发后在DropDownList中获取重复项,请尝试在绑定代码中添加此项,然后再设置DropDown的DataSource:

LOC_LIST2.Items.Clear();

这将清除DropDownList中的所有项目,然后您的当前绑定代码将运行并重新添加所需的项目。 因此,新代码将为:

SqlDataAdapter myda = new SqlDataAdapter("Select * FROM " + Label3.Text, con);
DataSet ds = new DataSet();
myda.Fill(ds, "Table");
LOC_LIST2.Items.Clear();
LOC_LIST2.DataSource = ds.Tables[0];
LOC_LIST2.DataTextField =     ds.Tables[0].Columns["Location_Instance"].ColumnName.ToString(); 
LOC_LIST2.DataValueField=ds.Tables[0].Columns["Location_Type"].ColumnName.ToStri??ng(); 
LOC_LIST2.DataBind(); 
LOC_LIST2.Items.Insert(0, new ListItem("---Choose One Location---", "-1"));

另外,在旁注中,您可能希望查看使用参数化SQL语句来帮助防止SQL注入之类的事情。 MSDN中的示例:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.selectcommand.aspx