//这是界面层 checkBox
        private void cB_toilet_CheckedChanged(object sender, EventArgs e)
        {
            if (cB_toilet.Checked == true) 
            {
               bool toilet = true;
                if (dGV_roomCheck.DataSource != null)
                {
                    dGV_roomCheck.DataSource = null;
                    dGV_roomCheck.DataSource = mybo.checkAdsl(toilet);
                }
                else
                {
                    dGV_roomCheck.DataSource = mybo.checkAdsl(toilet);
                }
            }
        }
   //这是业务逻辑层
        internal object checkAdsl(bool adsl)
        {
            return mydb.checkAdsl(adsl);
        }
   //这是数据访问层
        internal object checkAdsl(bool adsl)
        {
            cmd.CommandText = "select * from roomInfo where haveADSL=@adsl";
            //cmd.Parameters.AddWithValue("@toilet", toilet);
            //cmd.Parameters.AddWithValue("@tel", tel);
            cmd.Parameters.AddWithValue("@adsl", adsl);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

解决方案 »

  1.   


    //这是数据访问层
            internal object checkAdsl(bool adsl)
            {
                cmd.CommandText = "select * from roomInfo where haveADSL=@adsl";
                //cmd.Parameters.AddWithValue("@toilet", toilet);
                //cmd.Parameters.AddWithValue("@tel", tel);
                cmd.Parameters.AddWithValue("@adsl", adsl);
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }数据访问层你用的是object而在业务逻辑层你并没有转换为DataSet包括表示层都没有。试试这样:(或者数据访问层直接返回DataSet)//这是业务逻辑层
            internal DataSet checkAdsl(bool adsl)
            {
                return (DataSet)mydb.checkAdsl(adsl);
            }
      

  2.   

    改为这样,看看行不:           //这是业务逻辑层
            internal dataTable checkAdsl(bool adsl)
            {
                return mydb.checkAdsl(adsl);
            }
       //这是数据访问层
            internal datatable checkAdsl(bool adsl)
            {
                cmd.CommandText = "select * from roomInfo where haveADSL=@adsl";
                //cmd.Parameters.AddWithValue("@toilet", toilet);
                //cmd.Parameters.AddWithValue("@tel", tel);
                cmd.Parameters.AddWithValue("@adsl", adsl);
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
      

  3.   

    dGV_roomCheck.DataSource = (DataSet)(mybo.checkAdsl(toilet));
      

  4.   

    大侠,不能将 dataTable  强制转换成  dataSet
      

  5.   

    3楼都是  权威人士了。
    还在表示层处理DataSet的问题。
      

  6.   

    直接dataTable  不行吗?
    那你就在数据层改为用ds呀
      

  7.   

    哈哈,我找到原因了!!!是代码写错了, if (cB_toilet.Checked == true) 因为是复制的,我没个判断都是这句(没注意,呵呵!!!)