两次调用一个方法产生的问题!

hmimy1981 2006-11-29 03:34:08
先定义一个变量: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中是一样的?
...全文
118 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wslinfeng 2006-11-29
  • 打赏
  • 举报
回复
直接在加句
string StrSql="";
private void Page_Load(object sender, System.EventArgs e)
{


if(!this.IsPostBack)
{
//下面这个SQL语句是动态生成的
StrSql="select id,province,cointro from CompanyTable......";
//调用方法
Bind(StrSql);
......

hmimy1981 2006-11-29
  • 打赏
  • 举报
回复
明白了,刚才掉线了,没看见这么多网友的热心回复,呵呵,大家讲的都很清楚,谢谢大家了!
byhum 2006-11-29
  • 打赏
  • 举报
回复
大家讲得都太清楚了
hmimy1981 2006-11-29
  • 打赏
  • 举报
回复
同时也谢谢大家,谢谢scow(怡红快绿)!
hmimy1981 2006-11-29
  • 打赏
  • 举报
回复
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程序的时候这样做好像不行,这是为什么?
hmimy1981 2006-11-29
  • 打赏
  • 举报
回复
scow(怡红快绿):
写在if(!this.IsPostBack)外面不行,因为我还要动态查询,那样会产生错误
scow 2006-11-29
  • 打赏
  • 举报
回复
StrSql = SomeFunc();还是写在if(!this.IsPostBack)外面,
SomeFunc根据条件生成sql, 我只是指出原因, 你可以根据具体情况修改嘛.
seesea101 2006-11-29
  • 打赏
  • 举报
回复
在viewstate中存SQL语句,这样在其它类中也能取到值,如果用静态变量之类的感觉效果不如viewstate
cpp2017 2006-11-29
  • 打赏
  • 举报
回复
cpp2017(幕白兄) :为什么非要把它声明成一个属性呢?
像我那样声明成全局变量不行吗?

=================
每请求一次这个page 类会重新初始化。虽然是post back但是却是同一类page类的一个
新的实例在运行,所以strSql会丢失。
flyforlove 2006-11-29
  • 打赏
  • 举报
回复
页面里变量的scope就是page,第一次请求返回后,就释放了,第二次请求时这个类是重新生成了,微软为了让人感觉到这个页面一直存在,所以用了viewstate这么个东西,所以你必须用它。
hmimy1981 2006-11-29
  • 打赏
  • 举报
回复
scow(怡红快绿):
写在if(!this.IsPostBack)外面不行,因为我还要动态查询,那样会产和错误
hmimy1981 2006-11-29
  • 打赏
  • 举报
回复
cpp2017(幕白兄) :为什么非要把它声明成一个属性呢?
像我那样声明成全局变量不行吗?
cpp2017 2006-11-29
  • 打赏
  • 举报
回复
这样来声明StrSql;


private string StrSql
{
get
{
if (ViewState["StrSql"] != null)
{
return (String)ViewState["StrSql"];
}
else
return "";
}
set
{
ViewState["StrSql"] = value;
}
}
scow 2006-11-29
  • 打赏
  • 举报
回复
StrSql="select id,province,cointro from CompanyTable......";写在if(!this.IsPostBack)外面

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧