2013-08-02 49 views
0

我有3個下拉列表(DDL),全部綁定到此列名爲policeID。當另一個下拉列表選中時,防止重複數據出現在另一個下拉列表中

的policeID列有已知的3個數據值:

我試圖防止出現在另一個DDL的數據時,已經在一個ddl中被選中。

例如,我有3個DDL,他們

  1. DDL1
  2. DDL2
  3. DDL3

如果DDL1是選擇123456,該值123456會不會出現在其他2 DDL。

但是,當用戶取消選擇123456並選擇默認值時,此值123456將能夠在所有3個DDL中看到。

我曾問一個問題similiar在這個thread

我已經使用更新面板

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

,但它不工作。有沒有其他方法可以防止重複數據出現?

問候。

這是我如何將我的DDL綁定到SQL。

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); 

       ddlpid1.Items.Clear(); 
       ddlpid1.DataSource = ds2; 
       ddlpid1.DataTextField = "policeid"; 
       ddlpid1.DataValueField = "policeid"; 
       ddlpid1.DataBind(); 
       ddlpid1.Items.Insert(0, new ListItem("Police ID", "")); 
       ddlpid1.SelectedIndex = 0; 

       ddlpid2.Items.Clear(); 
       ddlpid2.DataSource = ds2; 
       ddlpid2.DataTextField = "policeid"; 
       ddlpid2.DataValueField = "policeid"; 
       ddlpid2.DataBind(); 
       ddlpid2.Items.Insert(0, new ListItem("Police ID", "")); 
       ddlpid2.SelectedIndex = 0; 

       ddlpid3.Items.Clear(); 
       ddlpid3.DataSource = ds2; 
       ddlpid3.DataTextField = "policeid"; 
       ddlpid3.DataValueField = "policeid"; 
       ddlpid3.DataBind(); 
       ddlpid3.Items.Insert(0, new ListItem("Police ID", "")); 
       ddlpid3.SelectedIndex = 0; 

       ddlpid4.Items.Clear(); 
       ddlpid4.DataSource = ds2; 
       ddlpid4.DataTextField = "policeid"; 
       ddlpid4.DataValueField = "policeid"; 
       ddlpid4.DataBind(); 
       ddlpid4.Items.Insert(0, new ListItem("Police ID", "")); 
       ddlpid4.SelectedIndex = 0; 

       ddlpid5.Items.Clear(); 
       ddlpid5.DataSource = ds2; 
       ddlpid5.DataTextField = "policeid"; 
       ddlpid5.DataValueField = "policeid"; 
       ddlpid5.DataBind(); 
       ddlpid5.Items.Insert(0, new ListItem("Police ID", "")); 
       ddlpid5.SelectedIndex = 0; 


      } 
+0

您可以使用下拉的OnSelectedIndexchange情況下,當這個事件觸發剛剛得到的物品清單DropDown並只綁定那些值到你想要的第二個下拉列表 –

回答

0

您可以使用緩存來實現第三下拉this.Like這

protected void bindDdls() 
    { 
     DataTable dt = new DataTable(); 
     try 
     { 
      ddlpid1.Items.Clear(); 
      ddlpid2.Items.Clear(); 
      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); 
      dt = ds.Tables[0]; 

      if (dt.Rows.Count > 0) 
      { 
       ddlpid1.DataSource = dt; 
       ddlpid1.DataTextField = dt.Columns["policeid"].ToString(); 
       ddlpid1.DataValueField = dt.Columns["policeid"].ToString(); 
       ddlpid1.DataBind(); 
       ddlpid1.Items.Insert(0, new ListItem("Select", "Select")); 
      } 
      else 
      { 
       ddlpid1.Items.Clear(); 
       ddlpid1.DataSource = null; 
       ddlpid1.DataBind(); 
       ddlpid1.Items.Insert(0, new ListItem("Select", "Select")); 
      } 

      if (Cache["PoliceData"] == null) 
      { 
       Cache.Insert("PoliceData", dt); 
      } 
      else 
      { 
       Cache.Remove("PoliceData"); 
       Cache.Insert("PoliceData", dt); 
      } 

      connAdd.Close(); 
      } 
      } 
     } 
     catch (Exception Ex) 
     { 
      throw Ex; 
     } 
     finally 
     { 
      if (connAdd.State == connAdd.Open) 
       connAdd.Close(); 
     } 
    } 

    protected void ddlpid1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ddlpid1.SelectedValue != "Select") 
     { 
      bindSecondDropdown(); 
     } 
    } 

    protected void bindSecondDropdown() 
    { 
     DataTable dt = new DataTable(); 
     DataTable dtFiltered = new DataTable(); 
     try 
     { 
      ddlpid2.Items.Clear(); 
      if (Cache["PoliceData"] != null) 
      { 
       dt = (DataTable)Cache["PoliceData"]; 
       if (ddlpid1.SelectedValue != "Select" && !string.IsNullOrEmpty(ddlpid1.SelectedValue)) 
        dt.DefaultView.RowFilter = "[policeID] <> " + ddlpid1.SelectedValue; 
       else 
        dt.DefaultView.RowFilter = "[policeID] <> " + 0; 
       dtFiltered = dt.DefaultView.ToTable(); 
      } 

      if (dt.Rows.Count > 0) 
      { 
       ddlpid2.DataSource = dtFiltered; 
       ddlpid2.DataTextField = dtFiltered.Columns["policeid"].ToString(); 
       ddlpid2.DataValueField = dtFiltered.Columns["policeid"].ToString(); 
       ddlpid2.DataBind(); 
       ddlpid2.Items.Insert(0, new ListItem("Select", "Select")); 
      } 
      else 
      { 
       ddlpid2.Items.Clear(); 
       ddlpid2.DataSource = null; 
       ddlpid2.DataBind(); 
       ddlpid2.Items.Insert(0, new ListItem("Select", "Select")); 
      } 
     } 
     catch (Exception Ex) 
     { 
      throw Ex; 
     } 
    } 

使用相同的方法。

+0

我已經通過添加了如何綁定我的DDL和SQL來編輯問題。它會改變你給的代碼嗎? –

+0

現在您可以看到編輯的代碼。你只需要根據你的需求調用bindDdls()函數。 –

+0

我還是不太明白'protected void bindDdls()'。我的'ddllocation'是什麼?我在這裏感到困惑。 –

0

您必須重新綁定SelectedIndexChanged事件上的DDL2和DDL3。

這裏是重新綁定的僞代碼上的SelectedIndexChanged

Dictionary<string, string> list = new Dictionary<string, string>(); 
for each item in datasource 
{ 
list.Add(item.key, item.value); 
} 

if (ddl1.SelectedValue != defaultValue){ 

    var itemToRemove = list.First(kvp => kvp.Value == ddl1.SelectedValue); 

    dic.Remove(itemToRemove .Key); 
} 

ddl2.DataSource = list; 
ddl2.DataTextField = "Value"; 
ddl2.DataValueField = "Key"; 
ddl2.DataBind(); 

希望這有助於

+0

我已經通過添加如何綁定我的DDL與SQL來編輯問題。它會改變你給的代碼嗎? –

+0

我看到您沒有從綁定的數據源中移除所選條目。 CAn you do ds2.Tables – ssingh3

相關問題