2013-04-17 48 views
3

當我嘗試從下拉框「不能在DropDownList中選擇多個項目」中選擇項目時,出現此錯誤。有人可以幫助我,我不知道爲什麼我得到這個。這裏是我的代碼:使用C#不能在DropDownList中選擇多個項目

private void Bind_GridView() 
{ 
this.BindGroupNameList(DropDownList1); 
} 

private void GetGroupNameList(DropDownList DropDownList1) 
    { 
     String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     SqlConnection con2 = new SqlConnection(strConnString); 
     SqlDataAdapter sda = new SqlDataAdapter(); 
     SqlCommand cmd1 = new SqlCommand("select distinct Name" + 
         " from MyTable"); 

     cmd1.Connection = con2; 
     con2.Open(); 

     DropDownList1.DataSource = cmd1.ExecuteReader(); 
     DropDownList1.DataTextField = "Name"; 
     DropDownList1.DataValueField = "Name"; 
     DropDownList1.DataBind(); 
     con2.Close(); 
     DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString()) 
       .Selected = true; 
    } 

    //on item change 
    protected void NameChanged(object sender, EventArgs e) 
    { 
     DropDownList DropDownList1 = (DropDownList)sender; 
     ViewState["MyFilter"] = DropDownList1.SelectedValue; 
     this.Bind_GridView(); 
    } 

,這裏是我的ASPX

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="NameChanged" 
         DataTextField="Name" DataValueField="Name" 
         AppendDataBoundItems="true"> 
         <asp:ListItem Text="ALL" Value="ALL"></asp:ListItem> 
         <asp:ListItem Text="Top 10" Value="10"></asp:ListItem> 
        </asp:DropDownList> 

這裏dropdownbox爲頁面加載代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!Page.IsPostBack) 
     { 

      ViewState["MyFilter"] = "ALL"; 
      this.Bind_GridView(); 


     } 

} 

這裏是調用GetGroupNameList的方法:

private void Bind_GridView() 
    { 
     DataTable dt = new DataTable(); 
     String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     SqlConnection con = new SqlConnection(strConnString); 
     SqlDataAdapter sda = new SqlDataAdapter(); 
     SqlCommand cmd = new SqlCommand("sp_filter_Names"); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.AddWithValue("@MyFilter", ViewState["MyFilter"].ToString()); 
     cmd.Connection = con; 
     sda.SelectCommand = cmd; 
     sda.Fill(dt); 
     GV_Test.DataSource = dt; 
     GV_Test.DataBind(); 
     GetGroupNameList(); 

    } 
+0

在那裏在Page_Load中如果是則PL的任何代碼。張貼也是。 – Ratna

+0

Ratina,我添加了頁面加載代碼。 thnx – moe

+0

好吧,沒有問題在DropDownList1.Items.FindByValue(ViewState [「MyFilter」] .ToString())之前在GetGroupNameList(DropDownList DropDownList1)中添加一行, .Selected = true;插入這個 - > DropDownList1.selectedIndex = -1;添加了 – Ratna

回答

12

Chan GE這一行:

DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString()) 
       .Selected = true; 

這樣:

DropDownList1.SelectedValue = ViewState["MyFilter"].ToString(); 

的問題是,你已經有了一個選擇的項目(可能是第一個在列表中),你正在尋找另一種已將其選爲好。請記住,有多個選定項目對ListBoxCheckListBox有效,但對於DropDownList不適用。

選擇其中一個ListItem不會自動取消選擇ListItemColletion中的其他項目。

+0

謝謝阿德里安,我做了這些變化,我仍然得到相同的錯誤 – moe

+1

@moe請確保您沒有兩個具有相同值的項目 –

+0

我沒有重複項目,我也從我的表中獲取不同的名稱你可以在我的select語句中看到 – moe

5

這真的很簡單,就像Adrian提到的那樣,當你在下拉菜單中選擇一個項目,然後在你的代碼的其他地方選擇另一個項目時發生這個錯誤。

要解決這個問題放一剎車點上GetGroupNameList,如果誤差在這行拋出:

DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString()).Selected = true; 

將下面的代碼行上面它上面:

DropDownList1.ClearSelection(); 

如果該行不會拋出錯誤,這意味着第二個選擇在GetGroupNameList方法調用之後完成,在這種情況下,在調用GetGroupNameList

之後直接放置
+0

丹尼,謝謝你,但我嘗試了所有你提出的建議,但仍然得到了重複。我還在我以前的文章中加入了頁面加載的代碼,以查看你是否可以看到我正在做的任何錯誤。 thnx – moe

+0

你在哪裏調用GetGroupNameList? –

+0

我在Bind_GridView方法中調用它。我剛剛更新了我的初始文章並添加了Bind_GridView方法。 PLS。往上看。謝謝 – moe

2
DropDownList1.ClearSelection(); 
DropDownList1.FindByValue("parameter").Selected = true; 

確保您沒有將多個ddls數據綁定到同一個數據源。被選中是一個項目的屬性,因此,如果不同的ddls從同一個數據源中選擇不同的項目,每個ddls最終會選擇多個項目,這可能是這裏發生的事情。

2

您可以嘗試:

DropDownList1.ClearSelection(); 

前行:

DropDownList1.Items.FindByValue(ViewState["MyFilter"].ToString()) 
      .Selected = true; 
1

,我建議你不要從ASPX加入的DropDownList的默認值,並清除之前綁定數據的所有項目。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="NameChanged" 
         DataTextField="Name" DataValueField="Name" > 
        </asp:DropDownList> 

和改變GetGroupNameList方法如下

private void GetGroupNameList(DropDownList ddl) 
    { 
     ddl.Items.Clear(); 
     String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     SqlConnection con2 = new SqlConnection(strConnString); 
     SqlDataAdapter sda = new SqlDataAdapter(); 
     SqlCommand cmd1 = new SqlCommand("select distinct Name" + 
         " from MyTable"); 

     cmd1.Connection = con2; 
     con2.Open(); 

     ddl.DataSource = cmd1.ExecuteReader(); 
     ddl.DataTextField = "Name"; 
     ddl.DataValueField = "Name"; 
     ddl.DataBind(); 
     con2.Close(); 

     ddl.Items.Insert(0, new ListItem("Top 10", "10")); 
     ddl.Items.Insert(0, new ListItem("ALL", "ALL")); 

     ListItem oListItem = ddl.Items.FindByValue(ViewState["MyFilter"].ToString()); 
     if(oListItem != null){ 
      ddl.ClearSelection(); 
      ddl.SelectedValue = oListItem.Value; 
     } 
    } 
+0

我認爲這打擊的問題癥結。每次用戶進行選擇時,都會將下拉列表重新綁定到數據源,但是您有AppendDataBoundItems =「true」,它可以防止以前的值在重新綁定上被刪除。您需要在每次重新綁定之前設置AppendDataBoundItems =「false」(默認值)或清除Items集合。 –

相關問題