2013-08-01 66 views
0

我有多個下拉列表框中查詢同一列,同一個表和同一個數據庫。例如,在memberID列下我有以下ID。Dropdownlist不會更新後添加更新面板

,我有3個不同的下拉列表框,如圖所示下面

<asp:DropDownList ID="memberID3" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid3_SelectedIndexChanged" > 
    </asp:DropDownList> 
    <asp:DropDownList ID="memberID1" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid1_SelectedIndexChanged"> 
    </asp:DropDownList> 
    <asp:DropDownList ID="memberID2" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid2_SelectedIndexChanged"> 
    </asp:DropDownList> 

我添加了下拉列表之間更新面板以便允許我的下拉列表刷新任何更新/選擇。

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
    </ContentTemplate> 
    </asp:UpdatePanel> 

例如,當選擇memberID1 12345,其他2下拉列表(memberID2和3)將不顯示ID 12345反之亦然,當memberID1選擇下拉列表的默認值,則ID重新出現在其他2 dropdownlistbox。我爲所有的DDL添加了默認值。

memeberID(number).Items.Insert(0, new ListItem(" Please select a Member ID", "")); 
memeberID(number).SelectedIndex = 0; 

如果我沒有弄錯更新面板的屬性,是不是可以使這個功能工作?

這裏是要求的綁定代碼。

protected void ddllocation_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI")) 
     { 
      connAdd.Open(); 

      var sql = "Select policeid from PoliceAccount where status ='available' and handle ='offcase' and postedto='" + ddllocation.SelectedValue + "'"; 
      using (var cmdAdd = new SqlDataAdapter(sql, connAdd)) 
      { 
       DataSet ds2 = new DataSet(); 
       cmdAdd.Fill(ds2); 

       memberID1.Items.Clear(); 
       memberID1.DataSource = ds2; 
       memberID1.DataTextField = "memberID"; 
       memberID1.DataValueField = "memberID"; 
       memberID1.DataBind(); 
       memberID1.Items.Insert(0, new ListItem("Please select a Member ID", "")); 
       memberID1.SelectedIndex = 0; 

       memberID2.Items.Clear(); 
       memberID2.DataSource = ds2; 
       memberID2.DataTextField = "memberID"; 
       memberID2.DataValueField = "memberID"; 
       memberID2.DataBind(); 
       memberID2.Items.Insert(0, new ListItem("Please select a Member ID", "")); 
       memberID2.SelectedIndex = 0; 

       memberID3.Items.Clear(); 
       memberID3.DataSource = ds2; 
       memberID3.DataTextField = "memberID"; 
       memberID3.DataValueField = "memberID"; 
       memberID3.DataBind(); 
       memberID3.Items.Insert(0, new ListItem("Please select a Member ID", "")); 
       memberID3.SelectedIndex = 0; 



      } 

UPDATE

現在我能夠讓我的其他DDL來重新綁定,並選擇默認值時,緩存中的其他下拉列表選擇的值。但是,當我選擇其他ID時,ID將被刪除,並且不會重新綁定另一個ddl。

protected void FillddlLocations() 
    { 
     FillDropdown(ddlpid1); 
     FillDropdown(ddlpid2); 
     FillDropdown(ddlpid3); 
     FillDropdown(ddlpid4); 
     FillDropdown(ddlpid5); 
     ddlpid1.Visible = false; 
     ddlpid2.Visible = false; 
     ddlpid3.Visible = false; 
     ddlpid4.Visible = false; 
     ddlpid5.Visible = false; 
    } 

    protected void FillDropdown(DropDownList ddl) 
    { 

     using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI")) 
     { 
      connAdd.Open(); 

      var sql = "Select policeid from PoliceAccount where status ='available' and handle ='offcase' and postedto='" + ddllocation.SelectedValue + "'"; 
      using (var cmdAdd = new SqlDataAdapter(sql, connAdd)) 
      { 
       DataSet ds2 = new DataSet(); 
       cmdAdd.Fill(ds2); 

       ddl.Items.Clear(); 
       ddl.DataSource = ds2; 
       ddl.DataBind(); 
       ddl.Items.Insert(0, new ListItem("Police ID", "")); 
       ddl.SelectedIndex = 0; 

      } 

     } 
    } 

    protected void ddlpid1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     if (ddlpid1.SelectedIndex > 0) 
     { 

      Session["pid1"] = ddlpid1.SelectedValue; 

      ListItem removeItem2 = ddlpid2.Items.FindByValue(ddlpid1.SelectedValue); 
      ddlpid2.Items.Remove(removeItem2); 
      ListItem removeItem3 = ddlpid3.Items.FindByValue(ddlpid1.SelectedValue); 
      ddlpid3.Items.Remove(removeItem3); 
      ListItem removeItem4 = ddlpid4.Items.FindByValue(ddlpid1.SelectedValue); 
      ddlpid4.Items.Remove(removeItem4); 
      ListItem removeItem5 = ddlpid5.Items.FindByValue(ddlpid1.SelectedValue); 
      ddlpid5.Items.Remove(removeItem5); 


     } 

     else 

     if (ddlpid1.SelectedItem.Text.Equals("Police ID")) 
     { 
      FillDropdown(ddlpid1); 
      FillDropdown(ddlpid2); 
      FillDropdown(ddlpid3); 
      FillDropdown(ddlpid4); 
      FillDropdown(ddlpid5); 


      ddlpid2.SelectedValue = (String)Session["pid2"]; 
      ddlpid2_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid3.SelectedValue = (String)Session["pid3"]; 
      ddlpid3_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid4.SelectedValue = (String)Session["pid4"]; 
      ddlpid4_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid5.SelectedValue = (String)Session["pid5"]; 
      ddlpid5_SelectedIndexChanged(this, EventArgs.Empty); 
     } 





    } 

    protected void ddlpid2_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     if (ddlpid2.SelectedIndex > 0) 
     { 

      Session["pid2"] = ddlpid2.SelectedValue; 
      ListItem removeItem1 = ddlpid1.Items.FindByValue(ddlpid2.SelectedValue); 
      ddlpid1.Items.Remove(removeItem1); 
      ListItem removeItem3 = ddlpid3.Items.FindByValue(ddlpid2.SelectedValue); 
      ddlpid3.Items.Remove(removeItem3); 
      ListItem removeItem4 = ddlpid4.Items.FindByValue(ddlpid2.SelectedValue); 
      ddlpid4.Items.Remove(removeItem4); 
      ListItem removeItem5 = ddlpid5.Items.FindByValue(ddlpid2.SelectedValue); 
      ddlpid5.Items.Remove(removeItem5); 


     } 
     else if (ddlpid2.SelectedItem.Text.Equals("Police ID")) 
     { 
      FillDropdown(ddlpid1); 
      FillDropdown(ddlpid2); 
      FillDropdown(ddlpid3); 
      FillDropdown(ddlpid4); 
      FillDropdown(ddlpid5); 

      ddlpid1.SelectedValue = (String)Session["pid1"]; 
      ddlpid1_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid3.SelectedValue = (String)Session["pid3"]; 
      ddlpid3_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid4.SelectedValue = (String)Session["pid4"]; 
      ddlpid4_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid5.SelectedValue = (String)Session["pid5"]; 
      ddlpid5_SelectedIndexChanged(this, EventArgs.Empty); 
     } 


    } 

    protected void ddlpid3_SelectedIndexChanged(object sender, EventArgs e) 
    {   
     if (ddlpid3.SelectedIndex > 0) 
     { 

      Session["pid3"] = ddlpid3.SelectedValue; 
      ListItem removeItem1 = ddlpid1.Items.FindByValue(ddlpid3.SelectedValue); 
      ddlpid1.Items.Remove(removeItem1); 
      ListItem removeItem2 = ddlpid2.Items.FindByValue(ddlpid3.SelectedValue); 
      ddlpid2.Items.Remove(removeItem2); 
      ListItem removeItem4 = ddlpid4.Items.FindByValue(ddlpid3.SelectedValue); 
      ddlpid4.Items.Remove(removeItem4); 
      ListItem removeItem5 = ddlpid5.Items.FindByValue(ddlpid3.SelectedValue); 
      ddlpid5.Items.Remove(removeItem5); 


     } 
    else if (ddlpid3.SelectedItem.Text.Equals("Police ID")) 
     { 
      FillDropdown(ddlpid1); 
      FillDropdown(ddlpid2); 
      FillDropdown(ddlpid3); 
      FillDropdown(ddlpid4); 
      FillDropdown(ddlpid5); 

      ddlpid1.SelectedValue = (String)Session["pid1"]; 
      ddlpid1_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid2.SelectedValue = (String)Session["pid2"]; 
      ddlpid2_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid4.SelectedValue = (String)Session["pid4"]; 
      ddlpid4_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid5.SelectedValue = (String)Session["pid5"]; 
      ddlpid5_SelectedIndexChanged(this, EventArgs.Empty); 
     } 


    } 

    protected void ddlpid4_SelectedIndexChanged(object sender, EventArgs e) 
    {    
     if (ddlpid4.SelectedIndex > 0) 
     { 
      Session["pid4"] = ddlpid4.SelectedValue; 

      ListItem removeItem1 = ddlpid1.Items.FindByValue(ddlpid4.SelectedValue); 
      ddlpid1.Items.Remove(removeItem1); 
      ListItem removeItem2 = ddlpid2.Items.FindByValue(ddlpid4.SelectedValue); 
      ddlpid2.Items.Remove(removeItem2); 
      ListItem removeItem3 = ddlpid3.Items.FindByValue(ddlpid4.SelectedValue); 
      ddlpid3.Items.Remove(removeItem3); 
      ListItem removeItem5 = ddlpid5.Items.FindByValue(ddlpid4.SelectedValue); 
      ddlpid5.Items.Remove(removeItem5); 


     } 

     else if (ddlpid4.SelectedItem.Text.Equals("Police ID")) 
     { 


      FillDropdown(ddlpid1); 
      FillDropdown(ddlpid2); 
      FillDropdown(ddlpid3); 
      FillDropdown(ddlpid4); 
      FillDropdown(ddlpid5); 

      ddlpid1.SelectedValue = (String)Session["pid1"]; 
      ddlpid1_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid2.SelectedValue = (String)Session["pid2"]; 
      ddlpid2_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid3.SelectedValue = (String)Session["pid3"]; 
      ddlpid3_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid5.SelectedValue = (String)Session["pid5"]; 
      ddlpid5_SelectedIndexChanged(this, EventArgs.Empty); 
     } 


    }  

    protected void ddlpid5_SelectedIndexChanged(object sender, EventArgs e) 
    {   

     if (ddlpid5.SelectedIndex > 0) 
     { 

      Session["pid5"] = ddlpid5.SelectedValue; 
      ListItem removeItem1 = ddlpid1.Items.FindByValue(ddlpid5.SelectedValue); 
      ddlpid1.Items.Remove(removeItem1); 
      ListItem removeItem2 = ddlpid2.Items.FindByValue(ddlpid5.SelectedValue); 
      ddlpid2.Items.Remove(removeItem2); 
      ListItem removeItem3 = ddlpid3.Items.FindByValue(ddlpid5.SelectedValue); 
      ddlpid3.Items.Remove(removeItem3); 
      ListItem removeItem4 = ddlpid4.Items.FindByValue(ddlpid5.SelectedValue); 
      ddlpid4.Items.Remove(removeItem4); 

     } 

    else if (ddlpid5.SelectedItem.Text.Equals("Police ID")) 
     { 
      FillDropdown(ddlpid1); 
      FillDropdown(ddlpid2); 
      FillDropdown(ddlpid3); 
      FillDropdown(ddlpid4); 
      FillDropdown(ddlpid5); 

      ddlpid1.SelectedValue = (String)Session["pid1"]; 
      ddlpid1_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid2.SelectedValue = (String)Session["pid2"]; 
      ddlpid2_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid3.SelectedValue = (String)Session["pid3"]; 
      ddlpid3_SelectedIndexChanged(this, EventArgs.Empty); 

      ddlpid4.SelectedValue = (String)Session["pid4"]; 
      ddlpid4_SelectedIndexChanged(this, EventArgs.Empty); 
     } 

    } 
+0

所以,你不希望下拉列表並行更新或你呢? –

+0

平行更新是什麼意思? –

+1

你是否希望所有三個下拉列表在其中一個更新時具有相同的值,或者它們是否應該保持不同步? –

回答

1

首先,我將設置的AutoPostBack屬性的下拉列表中,以真正在我的標記:

<asp:DropDownList ID="memberID1" AutoPostBack="true" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid1_SelectedIndexChanged"> 
    </asp:DropDownList> 
    <asp:DropDownList ID="memberID2" AutoPostBack="true" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid2_SelectedIndexChanged"> 
    </asp:DropDownList> 
    <asp:DropDownList ID="memberID3" AutoPostBack="true" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid3_SelectedIndexChanged" > 
    </asp:DropDownList> 

更新:我們可以存儲選擇的值在視圖狀態和重新建了dropdownlists後取回如下所示:

public partial class WebForm2 : System.Web.UI.Page 
{ 
    bool bFlag = true; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      FillddlLocations(); 
     } 
    } 

    //Properties to store selected value in ViewState 

    protected string MemberID1Selection 
    { 
     get 
     { 
      if (ViewState["MemberID1Selection"] != null) 
       return ViewState["MemberID1Selection"].ToString(); 
      return ""; 
     } 
     set { ViewState["MemberID1Selection"] = value; } 
    } 

    protected string MemberID2Selection 
    { 
     get 
     { 
      if (ViewState["MemberID2Selection"] != null) 
       return ViewState["MemberID2Selection"].ToString(); 
      return ""; 
     } 
     set { ViewState["MemberID2Selection"] = value; } 
    } 

    protected string MemberID3Selection 
    { 
     get 
     { 
      if (ViewState["MemberID3Selection"] != null) 
       return ViewState["MemberID3Selection"].ToString(); 
      return ""; 
     } 
     set { ViewState["MemberID3Selection"] = value; } 
    } 


    protected void FillddlLocations() 
    { 
     FillDropdown(memberID1); 
     FillDropdown(memberID2); 
     FillDropdown(memberID3); 
     memberID1.Visible = true; 
     memberID2.Visible = true; 
     memberID3.Visible = true; 
    } 

    protected void FillDropdown(DropDownList ddl) 
    { 

     using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = MajorProject; Integrated Security= SSPI")) 
     { 
      connAdd.Open(); 

      var sql = "Select policeid from PoliceAccount where status ='available' and handle ='offcase' and postedto='" + ddllocation.SelectedValue + "'"; 
      using (var cmdAdd = new SqlDataAdapter(sql, connAdd)) 
      { 
       DataSet ds2 = new DataSet(); 
       cmdAdd.Fill(ds2); 


       ddl.Items.Clear(); 
       ddl.DataSource = ds2; 
       ddl.DataTextField = "memberID"; 
       ddl.DataValueField = "memberID"; 
       ddl.DataBind(); 
       ddl.Items.Insert(0, new ListItem("Please select a Member ID", "")); 
       ddl.SelectedIndex = 0; 

      } 

     } 
    } 

    protected void IndexChanged(DropDownList ddlChanged, DropDownList ddlToFilter1, DropDownList ddlToFilter2) 
    { 
     string removeValue1 = ddlChanged == memberID1 ? MemberID1Selection : (ddlChanged == memberID2 ? MemberID2Selection : MemberID3Selection); 
     string selValue2 = ddlChanged == memberID1 ? MemberID2Selection : (ddlChanged == memberID2 ? MemberID1Selection : MemberID1Selection); 
     string selValue3 = ddlChanged == memberID1 ? MemberID3Selection : (ddlChanged == memberID2 ? MemberID3Selection : MemberID2Selection); 

     bFlag = false;//Prevent fireing the code again while changing the index 
     if (removeValue1 != "") 
     { 
      ListItem item1 = ddlToFilter1.Items.FindByValue(removeValue1); 
      ddlToFilter1.Items.Remove(item1); 
      ListItem item2 = ddlToFilter2.Items.FindByValue(removeValue1); 
      ddlToFilter2.Items.Remove(item2);    
     } 

     if (selValue3 != "") 
     { 
      ListItem item3 = ddlToFilter1.Items.FindByValue(selValue3); 
      ddlToFilter1.Items.Remove(item3); 
     } 
     if (selValue2 != "") 
     { 
      ListItem item4 = ddlToFilter2.Items.FindByValue(selValue2); 
      ddlToFilter2.Items.Remove(item4); 
     } 

     bFlag = false; 
     ddlToFilter1.SelectedIndex = ddlToFilter1.Items.IndexOf(ddlToFilter1.Items.FindByValue(selValue2)); 
     ddlToFilter2.SelectedIndex = ddlToFilter2.Items.IndexOf(ddlToFilter2.Items.FindByValue(selValue3)); 
    } 

    protected void ddlpid1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     MemberID1Selection = memberID1.SelectedValue; 
     if (bFlag) 
     { 
      FillDropdown(memberID2); 
      FillDropdown(memberID3); 
      IndexChanged(memberID1, memberID2, memberID3); 
     } 
    } 

    protected void ddlpid2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     MemberID2Selection = memberID2.SelectedValue; 
     if (bFlag) 
     { 
      FillDropdown(memberID1); 
      FillDropdown(memberID3); 
      IndexChanged(memberID2, memberID1, memberID3); 
     } 
    } 
    protected void ddlpid3_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     MemberID3Selection = memberID3.SelectedValue; 
     if (bFlag) 
     { 
      FillDropdown(memberID1); 
      FillDropdown(memberID2); 
      IndexChanged(memberID3, memberID1, memberID2); 
     } 
    } 
} 

我測試了代碼,它正在爲我工​​作。希望能幫助到你!

+0

不幫助。抱歉。 –

+0

@Teo Chuen Wei Bryan-我已編輯我的回答 – afzalulh

+0

似乎不工作 –