DataSet数据集的使用问题……帮忙看下,谢谢!
用三层架构写了一个方法,在DAL层(DbSqlProvider.cs)返回数据集:public static DataSet ExecSql(string sql)
{
try
{
OpenCon();
sqlset.Clear();
sqlda = new SqlDataAdapter(sql, sqlcon);
sqlda.Fill(sqlset);
CloseCon();
}
catch (Exception)
{
throw;
}
finally
{
}
然后在BLL层(DBFilter_admin.cs)通过两个方法执行不同的SQL语句返回不同的数据集:
public static DataSet GetCollege(string sql)
{
return DbSqlProvider.ExecSql(sql);
}
public static DataSet GetMajor(string sql)
{
return DbSqlProvider.ExecSql(sql);
}
然后在.aspx.cs页面调用,我想实现的是一个二级联动功能,DropDowmList1控件绑定学院表,然后根据DropDownList1控件的选项不同DropDowmList2控件加载相应的选项:
public void dlbind()
{
string sql = "select * from Colleges";
DropDownList1.DataSource = Elect.BLL.DBFilter_admin.GetCollege(sql);
DropDownList1.DataTextField = Elect.BLL.DBFilter_admin.GetCollege(sql).Tables[0].Columns[1].ToString();
DropDownList1.DataValueField = Elect.BLL.DBFilter_admin.GetCollege(sql).Tables[0].Columns[0].ToString();
DropDownList1.DataBind();
DropDownList1.Items.Insert(0, "请选择");
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList1.Items.Remove("请选择");
//string sql = "select * from Majors";
string sqlMajor = "select * from Colleges";
DropDownList2.DataSource = Elect.BLL.DBFilter_admin.GetMajor(sqlMajor);
DropDownList2.DataTextField = Elect.BLL.DBFilter_admin.GetMajor(sqlMajor).Tables[0].Columns[1].ToString();
DropDownList2.DataValueField = Elect.BLL.DBFilter_admin.GetMajor(sqlMajor).Tables[0].Columns[0].ToString();
DropDownList2.DataBind();
}
可是DropDownList1控件可以正常绑定学院表,但是当改变DW1的选项时DropDownList2没有反应,只有"select * from colleges"这条SQL语句可以让DropDownList2绑定成功,是因为之前执行过一次这条语句的原因吗?在DAL层我已经把sqlset.Clear();过了,这个是什么原因?
--------------------编程问答-------------------- 查看 --------------------编程问答-------------------- 你写的这个代码有点繁琐吧! --------------------编程问答-------------------- 那么一对看的头晕. --------------------编程问答--------------------
可是DropDownList1控件可以正常绑定学院表,但是当改变DW1的选项时DropDownList2没有反应,只有"select * from colleges"这条SQL语句可以让DropDownList2绑定成功,是因为之前执行过一次这条语句的原因吗?在DAL层我已经把sqlset.Clear();过了,这个是什么原因?
不用清空,dataset没有什么影响!你写的两个返回方法都可以用一个的,注意代码的规范! --------------------编程问答-------------------- 也不是三层吧,你不是用DropDownList1选在的数据查询另一张表绑定在DropDownList2的吗?怎么连条件也没有
--------------------编程问答-------------------- dropdownlist 里面的这个塑性加了吗 AutoPostBack="true" --------------------编程问答--------------------
说到重点了。
比方你的第一个DW1 是省。。返回的事 ds1: //省
那你第二个的方法总该传入一个参数吧 例如 public static DataSet GetMajor(string sql) 你这个SQL语句里面是否要有个变量 str_provice 呢? 根据这个来获取相应的城市信息。
还有就是你的DW1和DW2是否实现了联动效果呢。?最简单就是将DW的属性回发设置 TRUE 。,当然这样页面会刷新一次。至于实现的效果你自己再研究吧。 --------------------编程问答--------------------
需要参数,我这样写是为了把问题讲明白一点,就是如果
string sqlMajor = "select * from Colleges";
DropDownList2.DataSource = Elect.BLL.DBFilter_admin.GetMajor(sqlMajor);
DropDownList2.DataTextField = Elect.BLL.DBFilter_admin.GetMajor(sqlMajor).Tables[0].Columns[1].ToString();
DropDownList2.DataValueField = Elect.BLL.DBFilter_admin.GetMajor(sqlMajor).Tables[0].Columns[0].ToString();
DropDownList2.DataBind();
sqlMajor是"select * from Colleges"这句SQL语句的话DropDownList2就能绑定成功,其他的SQL语句就绑定不成功,是不是因为我调用ExecSql(string sql)方法的时候先把执行"select * from Colleges"这句返回的数据集绑定到了DropDownList1的原因? autopostback设置了。
补充:.NET技术 , C#