不能使用C#在DropDownList中选择多个项目

本文关键字:选择 项目 DropDownList 不能 | 更新日期: 2023-09-27 18:09:47

当我尝试从下拉框"无法在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>

这是页面加载的代码:

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

不能使用C#在DropDownList中选择多个项目

更改此行:

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

到此:

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

问题是您已经选择了一个项目(可能是列表中的第一个(,并且您正在搜索另一个项目并将其选中。请记住,具有多个选定项目对ListBoxCheckListBox有效,但对DropDownList无效。

选择其中一个ListItem并不会自动取消选择ListItemColletion中的其他项目。

这真的很简单,正如Adrian所提到的,当你在下拉列表中选择了一个项目,然后在代码的其他地方选择了另一个项目时,就会发生这个错误。

为了解决这个问题,在GetGroupNameList上设置一个制动点,如果错误出现在这一行:

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

将以下代码行放在其正上方:

DropDownList1.ClearSelection();

如果该行没有抛出错误,则意味着第二次选择是在GetGroupNameList方法调用之后完成的,在这种情况下,将DropDownList1.ClearSelection();直接放在GetGroupNameList 的调用之后

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

请确保没有将多个ddl数据绑定到同一数据源。被选中是一个项的属性,因此,如果不同的ddl从同一数据源中选择不同的项,则每个ddl最终都会选择多个项,这可能就是这里发生的情况。。

您可以尝试:

DropDownList1.ClearSelection();

线路前:

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

我建议您不要在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;
        }
    }