下拉列表没有选择正确的索引

本文关键字:索引 有选择 下拉列表 | 更新日期: 2023-09-27 18:08:45

我有一个数据库绑定下拉列表,从数据库获取其值。

当我调用ddl。SelectedItem . text或. value索引不正确。

假设DB表中的值如下所示:

Column1 | Column2
Dublin1 | Value1
Dublin2 | Value1
Dublin3 | Value1
London1 | Value2
London2 | Value2
London3 | Value2
SQL select query:
SELECT [Column1],[Column2] FROM [Table] ORDER BY [Column1]
DDL:

<asp:DropDownList runat="server" ID="ddl" 
 DataSourceID="SQLDataSource" DataTextField="Column1" 
 DataValueField="Column2"></asp:DropDownList>

只绑定ASPX:

<asp:SqlDataSource ID="SQLDataSource" runat="server" 
      ConnectionString="<%$ConnectionStrings:DatabaseConnectionString %>" 
      SelectCommand="SELECT [Column1],[Column2],FROM [Table] ORDER BY [Column1]">
</asp:SqlDataSource>

所以当我从下拉列表中得到Selected Item时无论我选择Dublin2还是Dublin3,它总是返回Dublin1,伦敦的值也是一样。

为两个项正确填充ddl。Text and item.value.

是否需要设置边框?

下拉列表没有选择正确的索引

我认为下拉菜单中的值必须是唯一的,Column2具有重复的值。您应该修改数据绑定,在文本和值上都使用Column1:

<asp:DropDownList runat="server" ID="ddl" 
 DataSourceID="SQLDataSource" DataTextField="Column1" 
 DataValueField="Column1"></asp:DropDownList>

然后在访问后面的代码中,你需要一个表的副本,并像这样访问它以获得值:

Dictionary<string, string> table = //Get the table here with Column1 as keys    
table[ddl.SelectedItem.Value]

是否在Page_Load中检查IsPostBack ?

if (!IsPostBack)
{  
    BindDropDownListddl();      
}

还可以将下拉列表的AutoPostBack设置为true。

<asp:DropDownList runat="server" ID="ddl" 
 DataSourceID="SQLDataSource" DataTextField="Column1" 
 DataValueField="Column2" AutoPostBack="true" ></asp:DropDownList>