我有一个表,其中包含三个值:分区,单位,站点和三个下拉列表。一个部门可能同时拥有单位和站点,其他部门可能只有单位或站点。 我可以为“分区”和“单位”或“站点”创建一个层叠下拉列表,但不能为所有三个值创建一个层叠下拉列表 我使用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);
}
}
}
}
当我选择该部门时,我希望显示核心响应单位和/或站点
答案 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;
}