2013-10-24 70 views
1

我的web表单以两个TextBoxes,两个Button,一个CheckBoxList(绑定到数据库查询的结果)和一个空的DropDownList开始。ASP动态DropDownList选择索引

当用户在第一个文本框中输入搜索短语并点击进入(或点击第一个按钮“搜索”)时,GridView出现,填充了从数据库中提取的行。当用户点击其中一行的选择按钮时,DropDownList被填充(绑定到数据库查询的结果)并被启用(如果查询返回结果 - 如果没有结果,则保持禁用状态)。当点击第二个按钮(“保存设置”)时,相关数据被保存到数据库,GridView的选择被清除,DropDownList被清除和禁用。

以上所有的作品。问题来自DropDownList。我无法让C#代码识别改变的SelectedIndex;取决于我如何随机播放我的代码,索引总是为0(并且DropDownList被强制保留在第一项上)或-1(并且列表变为禁用状态)。

的DropDownList代码:

<asp:DropDownList ID="myList" runat="server" AutoPostBack="True" 
    DataTextField="MyName" DataValueField="MyID" 
    Enabled="False" onselectedindexchanged="myList_SelectedIndexChanged" /> 

C#代码:

protected void myGrid_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     if (myGrid.SelectedIndex >= 0) 
     { 
      int id = int.Parse(myGrid.Rows[myGrid.SelectedIndex].Cells[2].Text); 
      connection.Open(); 

      string query = "..."; // Omitted for brevity; the query is correct 
      SqlDataSource source = new SqlDataSource(connectionString, query); 
      source.SelectParameters.Add("Param1", TypeCode.String, id.ToString()); 
      DataTable dt = ((DataView)source.Select(DataSourceSelectArguments.Empty)).Table; 
      dt.AcceptChanges(); 
      myList.DataSource = dt; 
      myList.DataBind(); 
      myList.Enabled = myList.Items.Count != 0; 

      if (!myList.Enabled) 
      { 
       myList.Items.Add(new ListItem("No Results", "0")); 
      } 
     } 
    } 
} 

protected void myList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // ((DropDownList)sender).SelectedIndex == -1 
} 

我读过,有一些问题DropDownList的同时寻找一个解决我的问题,但除了注意要设置AutoPostBack =“True”,我找到的其他情况都没有帮助。

回答

2

为什么DropDownList失去其SelectedIndex值的一个常见原因是在回发期间再次绑定数据。您是否将数据填充到代码中其他位置的DropDownList?也许有其他的东西导致GridView的SelectedIndex事件再次触发?

另一个想法是,更改DropDownList的Enabled状态可能会导致此行为。在不禁用DropDownList的情况下尝试您的代码,并查看是否有更改。

+0

嗯,我不觉得傻。 'myList.Items.Clear()'在'Page_Load'中。那肯定会做到! –