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