//这是界面层
        /// <summary>
        /// 按费用要求搜索客房记录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_roomPrerequisite_Click(object sender, EventArgs e)
        {
            string price = tbx_price.Text;
            try
            {
                if (tbx_price.Text.Trim() == "") MessageBox.Show("请输入费用范围", "提示您");
                if (dGV_rCheckPrice.DataSource != null)
                {
                    dGV_rCheckPrice.DataSource = null;
                    dGV_rCheckPrice.DataSource = mybo.checkPrice(price);
                    tbx_price.Text = null;
                }
                else
                {
                    dGV_rCheckPrice.DataSource = mybo.checkPrice(price);
                    tbx_price.Text = null;
                }
            }
            catch 
            {
                return;
            }
        }
         //这是业务逻辑层
         /// <summary>
        /// 按“费用范围”查询
        /// </summary>
        /// <param name="price"></param>
        /// <returns></returns>
        internal object checkPrice(string price)
        {
            return mydb.checkPrice(price);
        }
        //这是数据访问层
        /// <summary>
        /// 按“费用范围”返回数据记录
        /// </summary>
        /// <param name="price"></param>
        /// <returns></returns>
        internal object checkPrice(string price)
        {
            cmd.CommandText = "select * from roomInfo where rent<=@price";
            cmd.Parameters.AddWithValue("@rent", price);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }

解决方案 »

  1.   

    第二次查询表格空了?
    cmd怎么定义的?
      

  2.   

    internal object checkPrice(string price)
    {
       cmd=new SqlCommand();//这里加个看看
       cmd.CommandText = "select * from roomInfo where rent<=@price";
       cmd.Parameters.AddWithValue("@rent", price);
       OleDbDataAdapter da = new OleDbDataAdapter();
       da.SelectCommand = cmd;
       DataTable dt = new DataTable();
       da.Fill(dt);
       return dt;
    }
      

  3.   

    你把数据源给清了,到第二次绑定的时候要再使用一下databind()
      

  4.   

    tbx_price.Text = null;
    你想干嘛?
    点击按钮后清空文本框? 那这样写tbx_price.Text = "";
    不然你的这句话就会影响你下次查询的那个price.
      

  5.   

    你把数据源给清了,到第二次绑定的时候要再使用一下databind()----要重新邦定
      

  6.   

     try
                {
                    if (tbx_price.Text.Trim() == "") MessageBox.Show("请输入费用范围", "提示您");
                    if (dGV_rCheckPrice.DataSource != null)
                    {
                        dGV_rCheckPrice.DataSource = null;
                        dGV_rCheckPrice.DataSource = mybo.checkPrice(price);
                        tbx_price.Text = null;
                    }
                    else这段代码,我觉得就不用要吧~~~~
      

  7.   

     两处 dGV_rCheckPrice.DataSource = mybo.checkPrice(price);
    下都加上dGV_rCheckPrice.DataBind();
      

  8.   

    很郁闷还有查一次,二次失效的,这么奇怪!
    if (tbx_price.Text.Trim() == "") MessageBox.Show("请输入费用范围", "提示您");建议这行这样写if (tbx_price.Text.Trim() == "") {
    MessageBox.Show("请输入费用范围", "提示您");
    return;
    }
      

  9.   


            public DbAccess(string path)
            {
                string connStr = "";
                conn = new OleDbConnection();//初始化conn
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path;
                conn.ConnectionString = connStr;
                cmd = new OleDbCommand();
                cmd.Connection = conn;
            }
      

  10.   


    还有一个问题,我做上面的查询后再做下面的查询时 ,下面的结果始终我空。反之亦然。真实奇怪!!!
    现在把代码都贴出来了,请高手帮忙看看!!!
    这是界面层        private void btn_all_Click(object sender, EventArgs e)
            {
                bool toilet = true;
                bool adsl = true;
                bool tel = true;
                if (dGV_roomCheck.DataSource != null)
                {
                    dGV_roomCheck.DataSource = null;
                    dGV_roomCheck.DataSource = mybo.checkAllGInfo(toilet, adsl, tel);
                }
                else
                {
                    dGV_roomCheck.DataSource = mybo.checkAllGInfo(toilet, adsl, tel);
                }
            }
              private void rB_tel_CheckedChanged(object sender, EventArgs e)
            {
                bool tel = true;
                if (dGV_roomCheck.DataSource != null)
                {
                    dGV_roomCheck.DataSource = null;
                    dGV_roomCheck.DataSource = mybo.checkTel(tel);
                }
                else
                {
                    dGV_roomCheck.DataSource = mybo.checkTel(tel);
                }
            }
             private void rB_toilet_CheckedChanged(object sender, EventArgs e)
            {
                bool toilet = true;
                if (dGV_roomCheck.DataSource != null)
                {
                    dGV_roomCheck.DataSource = null;
                    dGV_roomCheck.DataSource = mybo.checkToil(toilet);
                }
                else
                {
                    dGV_roomCheck.DataSource = mybo.checkToil(toilet);
                }
            }
            private void rB_adsl_CheckedChanged(object sender, EventArgs e)
            {
                bool adsl = true;
                if (dGV_roomCheck.DataSource != null)
                {
                    dGV_roomCheck.DataSource = null;
                    dGV_roomCheck.DataSource = mybo.checkAdsl(adsl);
                }
                else
                {
                    dGV_roomCheck.DataSource = mybo.checkAdsl(adsl);
                }
            }        private void btn_roomPrerequisite_Click(object sender, EventArgs e)
            {
                string price = tbx_price.Text;
                try
                {
                    if (tbx_price.Text.Trim() == "")
                    {
                        MessageBox.Show("请输入费用范围", "提示您");
                        return;
                    }
                    if (dGV_rCheckPrice.DataSource != null)
                    {
                        dGV_rCheckPrice.DataSource = null;
                        dGV_rCheckPrice.DataSource = mybo.checkPrice(price);
                        tbx_price.Text = "";
                    }
                    else
                    {
                        dGV_rCheckPrice.DataSource = mybo.checkPrice(price);
                        tbx_price.Text = "";
                    }
                }
                catch
                {
                    return;
                }
            }
            private void tbx_price_TextChanged(object sender, EventArgs e)
            {
                try
                {
                    if (double.Parse(tbx_price.Text) < 200 && double.Parse(tbx_price.Text) > 0)
                    {                }
                    else if (double.Parse(tbx_price.Text) > 200)
                    {
                        MessageBox.Show("输入值太大了", "提示您");
                        tbx_price.Text = "";
                        return;
                    }
                }
                catch
                {
                    tbx_price.Text = "";
                    return;
                }        }
      

  11.   

    这里是 业务逻辑层class BusinessLogic
        {
            DbAccess mydb = new DbAccess(@" + Application.StartupPath + myDbAccess.mdb");//实例化数据访问层        internal object checkAdsl(bool adsl)
            {
                return mydb.checkAdsl(adsl);
            }        internal object checkToil(bool toilet)
            {
                return mydb.checkToil(toilet);
            }
     
            internal object checkTel(bool tel)
            {
                return mydb.checkTel(tel);
            }
            internal object checkAllGInfo(bool toilet, bool adsl, bool tel)
            {
                return mydb.checkAllGInfo(toilet,adsl,tel);
            }
            internal object checkPrice(string price)
            {
                return mydb.checkPrice(price);
            }
        } 
      

  12.   

    这是数据访问层class DbAccess
        {   
            public DbAccess(string path)
            {
                string connStr = "";
                conn = new OleDbConnection();//初始化conn
                connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path;
                conn.ConnectionString = connStr;
                cmd = new OleDbCommand();
                cmd.Connection = conn;
            }
            private OleDbConnection conn;//定义连接对象
            private OleDbCommand cmd;  //定义命令对象
         
            private bool OpenConn()//打开数据库数据连接
            {
                if (conn.State != ConnectionState.Open)//判断数据库连接是否打开
                {
                    conn.Open();
                    return true;
                }
                else
                {
                    return false;
                }
            }
                   private bool CloseConn()//关闭数据库连接
            {
                if (conn.State != ConnectionState.Closed)//判断数据库连接是否关闭
                {
                    conn.Close();
                    return true;
                }
                else
                {
                    return false;
                }
            }
          internal object getAllData(string p)//从逻辑层传入表名,访问数据层
            {
                cmd.CommandText = "select * from " + p;
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmd;           
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            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;
            }
       
            internal object checkToil(bool toilet)
            {
                cmd.CommandText = "select * from roomInfo where haveToilet=@toilet";
                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;
            }
         
            internal object checkTel(bool tel)
            {
                cmd.CommandText = "select * from roomInfo where haveTel=@tel";
                cmd.Parameters.AddWithValue("@tel", tel);
                OleDbDataAdapter da = new OleDbDataAdapter();
                da.SelectCommand = cmd;
                DataTable dt = new DataTable();
                da.Fill(dt);
                return dt;
            }
            internal object checkAllGInfo(bool toilet, bool adsl, bool tel)
            {
                cmd.CommandText = "select * from roomInfo where haveADSL=@adsl and haveToilet =@toilet and havetel=@tel";
                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;
            }
             internal object checkPrice(string price)
            {
                cmd.CommandText = "select * from roomInfo where rent<=@price";
                cmd.Parameters.AddWithValue("@rent", price);
                OleDbDataAdapter da1 = new OleDbDataAdapter();
                da1.SelectCommand = cmd;
                DataTable dt = new DataTable();
                da1.Fill(dt);
                return dt;
            }
        }