DropDownList错误中无法选择多个项目

时间:2015-06-13 15:51:37

标签: c# asp.net

我试图获取名为ddlBrand的下拉列表的值,因为我可以使用它来动态更改另一个名为ddlSubBrand的下拉列表中的项目,该列表具有相同的形式。

这是我的AddProduct.aspx中的2下拉列表

<asp:DropDownList ID="ddlBrand" runat="server"
OnSelectedIndexChanged="ddlBrand_SelectedIndexChanged" 
AutoPostBack="true" ></asp:DropDownList>

<asp:DropDownList ID="ddlSubBrand" runat="server">
</asp:DropDownList><br /><br />

对于代码隐藏文件,我有一个页面加载将数据从我的SQL绑定到下拉列表,我有另一种方法用于SelectedIndexChanged,我试图在他们尝试获取值时尽快选择它。

protected void Page_Load(object sender, EventArgs e)
    {
        BrandManager brandManager = new BrandManager();
        CategoryManager categoryManager = new CategoryManager();
        if (Page.IsPostBack == false)
        {
            ddlBrand.DataSource = brandManager.getAllBrand();
            ddlBrand.DataTextField = "BrandName";
            ddlBrand.DataValueField = "BrandId";
            ddlBrand.DataBind();
            ListItem item = new ListItem();
            item.Value = "0";
            item.Text = "--Select Brand--";
            ddlBrand.Items.Insert(0, item);

            ddlCategory.DataSource = categoryManager.getAllCategory();
            ddlCategory.DataTextField = "CategoryName";
            ddlCategory.DataValueField = "CategoryId";
            ddlCategory.DataBind();
            ListItem item1 = new ListItem();
            item.Value = "0";
            item.Text = "--Select Category--";
            ddlBrand.Items.Insert(0, item);


        }

    }
    protected void ddlBrand_SelectedIndexChanged(object sender, EventArgs args)
    {
        int value = int.Parse(ddlBrand.SelectedValue);


    }

我似乎得到一个错误,上面写着:

&#39; /&#39;中的服务器错误应用。 无法在DropDownList中选择多个项目。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.Web.HttpException:无法在DropDownList中选择多个项目。

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

3 个答案:

答案 0 :(得分:1)

您复制粘贴这些行并且没有将项目更改为item1而ddlBrand更改为ddlSubBrand

        item.Value = "0";
        item.Text = "--Select Category--";
        ddlBrand.Items.Insert(0, item);

所以基本上你要将项目两次添加到ddlBrand。如果选择了这个,那么你有多个&#39;选择的项目。

将您的代码更改为:

        item1.Value = "0";
        item1.Text = "--Select Category--";
        ddlSubBrand.Items.Insert(0, item1);

答案 1 :(得分:0)

场景类似于下面的代码

最初,我们为多个角色选择添加了ListBox-

<asp:ListBox ID="lstRoles" runat="server" CssClass="form-control" AppendDataBoundItems="true" SelectionMode="Multiple"></asp:ListBox>

 drpFunderName.DataSource = entities.GetRoles.ToList();
 drpFunderName.DataValueField = "ID";
 drpFunderName.DataTextField = "Name";
 drpFunderName.DataBind();

在编辑模式下,我们正在显示多个角色-

IList<RoleModel> roleModels = entities.Roles.Where(r => r.IsActive == true).ToList();
for (int i = 0; i < roleModels.Count; i++)
{
    for (int j = 0; j < lstRoles.Items.Count; j++)
    {
        if (roleModels[i].Id == int.Parse(lstRoles.Items[j].Value))
        {
            lstRoles.Items[j].Selected = true;
        }
    }
}

更改 SelectionMode =“ Single” 后,还使用与上述相同的逻辑进行角色选择(多项选择),然后出现错误,如在DropDownList错误中不能选择多项 >

您必须在“编辑”表单中更改用于角色选择的代码-

RoleModel roleModel = entities.Roles.FirstOrDefault(r => r.RoleId == 4);
if (roleModel != null && roleModel.RoleId.HasValue)
{
    lstRoles.SelectedValue =Convert.ToString(roleModel.RoleId.Value);
}

答案 2 :(得分:-1)

==&gt;将此项放入页面加载事件

if(!IsPostBack)             {                 BindGrid();

            ddlBrand.AppendDataBoundItems = true;

            String strQuery = "select Brandid, Brandname from University";
            ddlBrand.DataSource = cmd.ExecuteReader();
            ddlBrand.DataTextField = "sUniversity_name";
            ddlBrand.DataValueField = "nUniversity_id";
            ddlBrand.DataBind();

}

===&GT; SelectedIndex Change事件中的更改:

protected void ddlBrand_SelectedIndexChanged(object sender, EventArgs e)
    {

         ddlCategory.Items.Clear();
             ddlCategory.Items.Add(new ListItem("--Select Sub-Category--", ""));

            ddlCategory.AppendDataBoundItems = true;

            String strQuery = "select nCategory_id, sCategory_name from Category " +
                                 "where nBrandid=@nBrandid";

         try
                {
                    con.Open();
                    ddlCategory.DataSource = cmd.ExecuteReader();
                    ddlCategory.DataTextField = "sCategory_name";
                    ddlCategory.DataValueField = "nCategory_id";
                    ddlCategory.DataBind();
                    if (ddlCategory.Items.Count > 1)
                    {
                        ddlCategory.Enabled = true;
                    }
                    else
                    {
                        ddlCategory.Enabled = false;
                        ddlDept.Enabled = false;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    con.Close();
                    con.Dispose();
                }