根据主要下拉列表级联两个下拉列表

时间:2019-07-26 06:48:36

标签: c# asp.net sql-server

我有一个表,其中包含三个值:分区,单位,站点和三个下拉列表。一个部门可能同时拥有单位和站点,其他部门可能只有单位或站点。 我可以为“分区”和“单位”或“站点”创建一个层叠下拉列表,但不能为所有三个值创建一个层叠下拉列表 我使用asp.net和C#和SQL表的存储过程

我尝试使用该方法进行简单的级联下拉,但出现错误

System.ArgumentException:'该SqlParameter已包含在另一个SqlParameterCollection中。'

using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI.WebControls;
using System.Configuration;


namespace WAPReview
{
    public partial class AddData : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                PopulateDivisionDropDownList();
            }
        }

        private DataSet GetData(string SPName, SqlParameter SPParameter)
        {
            string CS = ConfigurationManager.ConnectionStrings["ConnString1"].ConnectionString;
            SqlConnection con = new SqlConnection(CS);
            SqlDataAdapter da = new SqlDataAdapter(SPName, con);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            if (SPParameter != null)
            {
                da.SelectCommand.Parameters.Add(SPParameter);
            }
            DataSet DS = new DataSet();
            da.Fill(DS);
            return DS;
        }

        private void PopulateDivisionDropDownList()
        {
            ddlDivision.DataSource = GetData("Division", null);
            ddlDivision.DataBind();

            ListItem liDivision = new ListItem("Select Division", "-1");
            ddlDivision.Items.Insert(0, liDivision);

            ListItem liUnit = new ListItem("Select Unit", "-1");
            ddlUnit.Items.Insert(0, liUnit);

            ListItem liSite = new ListItem("Select Site", "-1");
            ddlSite.Items.Insert(0, liSite);

            ddlUnit.Enabled = false;
            ddlSite.Enabled = false;
        }
        protected void ddlDivision_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlDivision.SelectedValue == "-1")
            {
                ddlUnit.SelectedIndex = 0;
                ddlUnit.Enabled = false;
                ddlSite.SelectedIndex = 0;
                ddlSite.Enabled = false;
            }
            else
            {
                ddlUnit.Enabled = true;
                ddlSite.Enabled = true;

                SqlParameter parameter = new SqlParameter
                {
                    ParameterName = "@Division",
                    Value = ddlDivision.SelectedValue
                };

                ddlUnit.DataSource = GetData("Unit", parameter);
                ddlUnit.DataBind();

                ddlSite.DataSource = GetData("Site", parameter);
                ddlSite.DataBind();

                ListItem liUnit = new ListItem("Select Unit", "-1");
                ddlUnit.Items.Insert(0, liUnit);

                ListItem liSite = new ListItem("Select Unit", "-1");
                ddlSite.Items.Insert(0, liSite);
            }
        }
    }
}

当我选择该部门时,我希望显示核心响应单位和/或站点

1 个答案:

答案 0 :(得分:0)

正如错误所解释的那样,您在两个不同的SqlCommand中使用了变量 parameter (两个调用函数 GetData )。

尝试更改 GetData 函数的参数,以直接输入ddlDivision.SelectedValue并在函数内部创建SqlParameter:它将起到一种魅力!

private DataSet GetData(string SPName, object selectedDivision)
    {
        string CS = ConfigurationManager.ConnectionStrings["ConnString1"].ConnectionString;
        SqlConnection con = new SqlConnection(CS);
        SqlDataAdapter da = new SqlDataAdapter(SPName, con);
        da.SelectCommand.CommandType = CommandType.StoredProcedure;

        if (selectedDivision != null)
        {
            SqlParameter parameter = new SqlParameter
                {
                    ParameterName = "@Division",
                    Value = selectedDivision
                };

            da.SelectCommand.Parameters.Add(parameter);
        }

        DataSet DS = new DataSet();
        da.Fill(DS);
        return DS;
    }