当前位置:编程学习 > C#/ASP.NET >>

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没有什么影响!你写的两个返回方法都可以用一个的,注意代码的规范! --------------------编程问答--------------------
引用 2 楼 dingzongyinnihao 的回复:
你写的这个代码有点繁琐吧!
也不是三层吧,你不是用DropDownList1选在的数据查询另一张表绑定在DropDownList2的吗?怎么连条件也没有
--------------------编程问答-------------------- dropdownlist 里面的这个塑性加了吗 AutoPostBack="true"  --------------------编程问答--------------------
引用 5 楼 zhuhui184 的回复:
引用 2 楼 dingzongyinnihao 的回复:

你写的这个代码有点繁琐吧!
也不是三层吧,你不是用DropDownList1选在的数据查询另一张表绑定在DropDownList2的吗?怎么连条件也没有

说到重点了。
比方你的第一个DW1 是省。。返回的事 ds1: //省
那你第二个的方法总该传入一个参数吧 例如 public static DataSet GetMajor(string sql) 你这个SQL语句里面是否要有个变量 str_provice 呢? 根据这个来获取相应的城市信息。
还有就是你的DW1和DW2是否实现了联动效果呢。?最简单就是将DW的属性回发设置 TRUE 。,当然这样页面会刷新一次。至于实现的效果你自己再研究吧。 --------------------编程问答--------------------
引用 7 楼 gac520 的回复:
引用 5 楼 zhuhui184 的回复:

引用 2 楼 dingzongyinnihao 的回复:

你写的这个代码有点繁琐吧!
也不是三层吧,你不是用DropDownList1选在的数据查询另一张表绑定在DropDownList2的吗?怎么连条件也没有

说到重点了。
比方你的第一个DW1 是省。。返回的事 ds1: //省
那你第二个的方法总该传入一个参数吧 例如 pu……

需要参数,我这样写是为了把问题讲明白一点,就是如果
 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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,