这个问题困扰我好几天了。请大家帮我看看问题出在哪里?打开查询窗口
private void button1_Click(object sender, System.EventArgs e)
        {
            Form2 frm = new Form2();
            frm.ShowDialog();//打开查询窗口Form2,等待查询窗口关闭,再执行以下代码
            string strSql  = frm.strSql ;//strWhere是Form2中生成的Where条件组合语句
                    //以下是执行查询条件,刷新datagridview过程   
                       SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["cnn"]); 
con.Open(); 
SqlDataAdapter ada = new SqlDataAdapter(strWhere,con); //这里接收不到strSql 
DataSet ds = new DataSet(); 
ada.Fill(ds,"temp"); 
DataGridview1.DataSource=ds.Tables["temp"].DefaultView; 
DataGridview1.DataBind(); 
ada.Dispose(); 
con.Close();           
            frm.Dispose();
        }
  查询窗口   Public String strSql 
   protected void search_Click(object sender, System.EventArgs e)

        String a1= this.TextBox1.Text.Trim().ToString()
        String a2=this.TextBox2.Text.Trim().ToString()        
        StringBuilder   strSql  =   new StringBuilder("select * from I_CustomOrder where 1=1 ")        If (a1 <> "" And a2 <> "" )
       {
            strSql.Append(" and WRFAC between '" + a1 + "' and '" + a2 + "' ")
        }
        strSql.Append("order by WRTOOL,WRRDTE desc")
        string strSql=strSql.ToString();
//不能传strSql回去,不知道是StringBuilder 的问题还是StringBuilder 转换为string的问题
        this.Close()
}
  

解决方案 »

  1.   

    晕,楼主你Form1中是string strSql  = frm.strSql ;//strWhere是Form2中生成的Where条件组合语句
    那你的
    SqlDataAdapter ada = new SqlDataAdapter(strWhere,con);
    红字部分怎么会有strWhere的,应该是strSql才对啊
      

  2.   

    Public String strSql 
    你将这个参数封装成属性试看看
    public string StrSql
    {
        get
        {
            return this.strSql;
        }
    }
    接收窗口
    string strSql  = frm.StrSql;
      

  3.   

    strWhere是我打错了,不好意思
      

  4.   

    基本了解楼主的Form的界面
    在那个Search按钮中最后一句话是close(),窗口都被关闭销毁了,值自然传不进父窗口
    下面这个应该可行吧:
    将Form2的“Search”按钮的DialogResult设置为OK(其他的什么Yes也行)
    在button1_Click()中写成:
    if(frm2.ShowDialog()==DialogResult.OK)
    {
        string strSql  = frm.strSql 
    }
      

  5.   


    楼上的“最后一句话是close(),窗口都被关闭销毁了”
    你研究清楚再说好不好啊,"close()窗口被销毁"谁说的啊,请你弄清楚close()与Dispose()的区别再说好不好啊
      

  6.   

    楼主建议你单步跟踪一下看看执行到
    SqlDataAdapter ada = new SqlDataAdapter(strSql,con);
    的时候,strSql中有没有值
    如果有值的话就说明传值成功了,那就是你的SQL语句有问题
    如果没有值的话你再考虑是不是传值出了问题
      

  7.   

    string strSql=strSql.ToString();
      StringBuilder   strSql  =   new StringBuilder("select * from I_CustomOrder where 1=1 ")
    Public String strSql 
    三个名字一样的变量 你确定没报错
    你确定传的是那个
      

  8.   

      查询窗口   Public String strSql 
       protected void search_Click(object sender, System.EventArgs e)
            { 
            String a1= this.TextBox1.Text.Trim().ToString()
            String a2=this.TextBox2.Text.Trim().ToString()        
            StringBuilder   strSql  =   new StringBuilder("select * from I_CustomOrder where 1=1 ")        If (a1 <> "" And a2 <> "" )
           {
                strSql.Append(" and WRFAC between '" + a1 + "' and '" + a2 + "' ")
            }
            strSql.Append("order by WRTOOL,WRRDTE desc")
            string strSql=strSql.ToString(); //这里只是新建立一个变量罢了,没有赋值到全局的strSql里。
    //不能传strSql回去,不知道是StringBuilder 的问题还是StringBuilder 转换为string的问题
            this.Close()
    }
    -----------------------------------------------------不可能的,三个变量同名,什么时候赋值过给全局变量 Public String strSql ??????
      

  9.   

    晕,我知道你的问题了 
    先把 
    StringBuilder strSql = new StringBuilder("select * from I_CustomOrder where 1=1 ") 
    把这里的strSql换一下,避免同名 
    热后 
    string strSql=strSql.ToString(); 
    这里你定义的是局部变量。不是给全局变量赋值的,改为: 
    this.strSql=strSql.ToString();
      

  10.   

    string strSql=strSql.ToString(); 
    这里你定义的是局部变量。不是给全局变量赋值的,改为: 
    this.strSql=strSql.ToString();果然是问题所在,又学到东西了。