Asp.net
Asp.NET DropDownList 在 PostBack 後重置 SelectedIndex
在網上做了很多研究之後,我仍然被這個問題難住了。我有一個頁面,將類別的名稱和計數載入到下拉列表中。我只在
!(Page.IsPostBack). 當AutoPostBack觸發SelectedIndex = 0. 我嘗試了幾種不同的方法。這是我的程式碼:頁
<form id="AddAssignmentForm" runat="server"> <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat="server" /> <asp:UpdatePanel ID="CommentUpdate" runat="server"> <ContentTemplate> Add Comment <asp:DropDownList ID="ddlCategory" runat="server" Width="206" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" AutoPostBack="true" /> <asp:TextBox ID="txtName" runat="server" Width="200" /> <asp:TextBox ID="txtAbbrv" runat="server" Width="200" /> <asp:TextBox ID="txtDescription" runat="server" Width="200" Height="90" TextMode="MultiLine" /> </ContentTemplate> </asp:UpdatePanel> </form>這是後端程式碼。
private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { GetCategories(); } } public void GetCategories() { String strSql = @"SELECT Name, Total FROM MyTable"; if (con.State == ConnectionState.Closed) con.Open(); OleDbCommand cmdsql = new OleDbCommand(strSql, con); OleDbDataReader cmdReader = cmdsql.ExecuteReader(); if (cmdReader.HasRows) { while (cmdReader.Read()) { ddlCategory.Items.Add(new ListItem(cmdReader["Category_Name"].ToString(), cmdReader["Total"].ToString())); } ddlCategory.SelectedIndex = -1; } cmdReader.Close(); con.Close(); } public void FillForm(int index) { ListItem item = ddlCategory.Items[index]; txtName.Text = item.Text + " " + (Convert.ToInt32(item.Value) + 1).ToString(); txtAbbrv.Text = item.Text.Substring(0, 1) + (Convert.ToInt32(item.Value) + 1).ToString(); } public void ddlCategory_SelectedIndexChanged(Object sender, EventArgs e) { //When I break here SelectedIndex always = 1. FillForm(ddlCategory.SelectedIndex); }我只是希望能夠根據選定的索引填充表單,但我似乎無法得到正確的答案。任何幫助表示讚賞。
我發現了問題。從我的 SQL 語句填充的值包含重複的值。由於某種原因,這導致整個事情以奇怪的方式發生故障,因此每次我選擇一個 ListItem 時,整個列表都會重置。通過確保沒有重複值,程式碼開始完美執行。感謝大家的幫助。
為下拉列表添加 AppendDataBoundItems=“true”