基于主下拉列表级联两个下拉列表



>我有一个包含三个值的表格,分区,单位,站点和三个下拉列表。一个部门可以同时拥有单位和场地,其他部门可能只有单位或只有网站。我可以为部门和单位或站点创建一个级联下拉列表,但不能为所有三个值创建一个级联下拉列表我使用 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);
            }
        }
    }
}

当我选择部门时,我希望显示共同单位和/或站点

正如错误所解释的那样,您在两个不同的 SqlCommand(对函数 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;
    }

最新更新