string sql="";
        int curPage;//当前页索引
        
        //查询按钮
        private void button6_Click(object sender, EventArgs e)
        {
            
            string name=txtname.Text.Trim();
            sql="select * from table where name like '%"+name+"'%";
            //部分代码忽略.......
        }       //下一页按钮
       private void button7_Click(object sender, EventArgs e)
        {
            
            curPage++;
            DateSet ds=Access.DBhelper(sql,curPage);//当用户点查询后sql依然没有值
            //部分代码忽略....
        }
当用户点击查询后,sql就被赋值了,但是当用户查询后,再点击“下一页”的时候,sql又变“”了,我知道string sql="";代码又执行了一遍,之前赋值给sql的值就没了,
所以我想实现的是,当用户点击查询按钮后,保存住那个sql语句,然后给其他按钮使用其实上面的代码不重要,只是想提出我的问题而已,一个全局变量,在被修改后,后面使用该变量的时候能得到它改变后的值

解决方案 »

  1.   

    两个方法共享一个变量的办法很多。
    最简单的就是Singleton模式了。
      

  2.   

    这不是C#的问题,这是ASP.NET机制的问题.
      

  3.   

    如果是 asp.net 程序,可以考虑把 sql 的值存入 Session 中。
      

  4.   

    如果是 winform 程序,LZ这样用就已经没有问题了。
      

  5.   

    加个static好象就可以了
    静态变量如果赋值的话那个值就没改变了。除非在赋值
      

  6.   

    我调试过了,它真的把string sql="";执行了一次,然后跳到了“下一页”按钮事件里面去了,所以sql永远是“”,愁死我了
      

  7.   

    我测试过了
    如果没加static的话
     string a="";
        protected void Button1_Click(object sender, EventArgs e)
        {
            a = TextBox1.Text;
            Response.Write("<script>alert('" + a + "')</script>");
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Write("<script>alert('" + a + "')</script>");
        }
    这样点击button1的时候是textbo1的值,然后button2是空
    可是如果加了static的话
    当点击button1的时候把值赋给a,由于a是静态变量,所以保存着,当点击button2的时候还是输入textbox的值
      

  8.   

     先定义
      class Class1
        {
            public static string sql;
           
        }
    在需要的地方赋值
     Class1.sql ="select * from table where name like '%"+name+"'%";
      

  9.   

    我调试过了,它真的把string sql="";执行了一次,然后跳到了“下一页”按钮事件里面去了,所以sql永远是“”,愁死我了
      

  10.   


    如果是 winform 程序,从你贴出来的代码来看,执行“下一页”按钮事件时,不会把string sql="";执行了一次的。应该是其他地方的问题,这段代码没问题
      

  11.   

    设置静态变量
    public static string sql="";
    除非你关闭程序,不然一直存在!!~
      

  12.   

    And then I think I could UP master only.
      

  13.   

    单步调试,监视下sql的变化嘛
      

  14.   

    大单线程里类级变量sql没理由等于“”啊好象,从你代码来看
      

  15.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms; namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            string sql = "";        //查询按钮
            private void button1_Click(object sender, EventArgs e)
            {            string name = "Boven";
                sql = "select * from table where name like '%" + name + "'%";
            }        //下一页按钮
            private void button2_Click(object sender, EventArgs e)
            {
                textBox1.Text = sql;
            }
        }
    }试验了,string sql = "";和static string sql = "";都没问题
      

  16.   

    这个上面说他程序没问题的各位大侠,我只是才学c#但是以前C,C++都知道传值和传地址的区别,C++中用指针传地址才能出了函数还能保持值。C#应该用引用方式才能保持住啊,我的天啊,大家赶快回家补补基础吧,虽然俺已经三年不做开发了。
      

  17.   

    B/S,C/S是有区别的,前者是出了方法变量就清空了,得用VIEWSTATE等来保存,后者则没问题可直接使用
      

  18.   

    同页面的方法共用变量可以用viewstate,因为不会过期,也是存储在客户端的隐藏控件中,减少服务器的压力;
    跨页面的方法共用变量时可用用session,数据是存储在服务器的内存中,虽然会过期,但是不会像viewstate一样,限制在同一个页面才能使用!
      

  19.   

    给 SQL 赋值单独做一个返回String 类型的方法,每次调用一下这个方法等于重新付给它了哪个值就不会空了