先定义一个变量:protected string StrSql;
然后:
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
    //下面这个SQL语句是动态生成的
    StrSql="select id,province,cointro from     CompanyTable......";
    //调用方法
    Bind(StrSql);
......然后再调用方法:
private void ChangePage(object src,Wuqi.Webdiyer.PageChangedEventArgs e)
{
pager.CurrentPageIndex=e.NewPageIndex;
Bind(StrSql);
}声明方法:
private void Bind(string sql)
{
OleDbCommand cmd=new OleDbCommand(""+StrSql+"",conn);
......
}
现在的问题是:在Page_Load事件中调用完之后,再在ChangePage中调用时,StrSql的值就变成null了,怎么样能让StrSql的值保存下来?即StrSql在Page_Load中和ChangePage中是一样的?

解决方案 »

  1.   

    StrSql="select id,province,cointro from     CompanyTable......";写在if(!this.IsPostBack)外面
      

  2.   

    这样来声明StrSql;
      private string StrSql
        {
            get
            {
                if (ViewState["StrSql"] != null)
                {
                    return (String)ViewState["StrSql"];
                }
                else
                    return "";
            }
            set
            {
                ViewState["StrSql"] = value;
            }
        }
      

  3.   

    cpp2017(幕白兄) :为什么非要把它声明成一个属性呢?
    像我那样声明成全局变量不行吗?
      

  4.   

    scow(怡红快绿):
    写在if(!this.IsPostBack)外面不行,因为我还要动态查询,那样会产和错误
      

  5.   

    页面里变量的scope就是page,第一次请求返回后,就释放了,第二次请求时这个类是重新生成了,微软为了让人感觉到这个页面一直存在,所以用了viewstate这么个东西,所以你必须用它。
      

  6.   

    cpp2017(幕白兄) :为什么非要把它声明成一个属性呢?
    像我那样声明成全局变量不行吗?=================
    每请求一次这个page 类会重新初始化。虽然是post back但是却是同一类page类的一个
     新的实例在运行,所以strSql会丢失。
      

  7.   

    在viewstate中存SQL语句,这样在其它类中也能取到值,如果用静态变量之类的感觉效果不如viewstate
      

  8.   

    StrSql = SomeFunc();还是写在if(!this.IsPostBack)外面,
    SomeFunc根据条件生成sql, 我只是指出原因, 你可以根据具体情况修改嘛.
      

  9.   

    scow(怡红快绿):
    写在if(!this.IsPostBack)外面不行,因为我还要动态查询,那样会产生错误
      

  10.   

    to cpp2017(幕白兄):
    谢谢!我按照你的方法去做,没有问题,解决了,我再加20分,只想请您概括的讲一下个中原由,为什么要那样写成一个属性?
    以前我在C/S中写C#程序的时候,我只要在类中这样声明StrSql;:
    public class hangye_list_1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox TextBox1;
    //声明全局变量StrSql
    public string StrSql;然后就可以在类中的各个方法和事件中使用StrSql了,现在写B/S程序的时候这样做好像不行,这是为什么?
      

  11.   

    同时也谢谢大家,谢谢scow(怡红快绿)!
      

  12.   

    直接在加句
      string StrSql="";
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!this.IsPostBack)
    {
        //下面这个SQL语句是动态生成的
        StrSql="select id,province,cointro from     CompanyTable......";
        //调用方法
        Bind(StrSql);
    ......