我的网页表单以两个TextBox,两个Buttons,一个CheckBoxList(绑定到数据库查询的结果)和一个空的DropDownList开始。
当用户在第一个TextBox中输入搜索短语并点击输入(或点击第一个按钮“搜索”)时,会出现一个GridView,其中填充了从数据库中提取的行。当用户点击其中一行的“选择”按钮时,将填充DropDownList(绑定到数据库查询的结果)并启用(如果查询返回结果 - 如果没有结果,则保持禁用状态)。单击第二个按钮(“保存设置”)时,相关数据将保存到DB,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”的注释之外,我发现的其他任何情况都没有帮助。
答案 0 :(得分:2)
DropDownList丢失其SelectedIndex值的一个常见原因是,在回发期间再次使用数据绑定。您是否在代码中的其他位置将数据填充到DropDownList?也许还有其他东西会导致GridView的SelectedIndex事件再次触发?
另一个想法是更改DropDownList的Enabled状态可能会导致此行为。尝试使用您的代码而不禁用DropDownList,看看是否有变化。