请教Asp.net全局变量的问题?!

JOHNCOOLS 2006-11-17 12:09:18
我正在写一个搜索显示的页面:

定义:
protected System.Web.UI.HtmlControls.HtmlInputText txtCarID;
.
.
.
public string strSql="select * from viw_DriverInfo";

然后页面LOAD
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
SetBind(strSql);// 初始化DataGrid

}
}


附带SetBind函数代码
private void SetBind(string strMySql)
{
try
{
DbHelperSQL.BindDataGrid(strMySql,dgrdDrives);//DATAGRID绑定

}
catch(Exception ex)
{
PageClsLib.ShowErrorDescription(this.Page ,ex.Message.ToString(),"",true,true,true);
}

}


我使用的是DataGrid的自带分页功能:
private void dgrdDrives_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
{
dgrdDrives.CurrentPageIndex=e.NewPageIndex;
SetBind(strSql);
}


下面是搜索功能的实现:
private void btnSearch_Click(object sender, System.EventArgs e)
{
string strTmpSql,strConSql="";

if(txtCarID.Value.ToString()!="" || txtCarID.Value.Length>0)
{
strTmpSql=" CarID like '%" + txtCarID.Value.ToString().Trim() + "%' ";
if(strConSql.Length>5)
strConSql=strConSql + " and " + strTmpSql;
else
strConSql=strTmpSql;
}

if(txtCarNo.Value.ToString()!="" || txtCarNo.Value.Length>0)
{
strTmpSql=" CarNo like '%" + txtCarNo.Value.ToString().Trim() + "%' ";
if(strConSql.Length>5)
strConSql=strConSql + " and " + strTmpSql;
else
strConSql=strTmpSql;
}

if(strConSql.Length>5)
{
strSql=strSql + " where " + strConSql;
SetBind(strSql);
}




现在问题来了!当页面第一次访问是没有问题的,分页等等都很正常,但当我使用搜索后可以显示出来,但分页不正常.

不知道为什么strSql自动恢复成初始化时,导致搜索时分页不成功!

请问究竟strSql这个全局变量应该怎样使用呢?
顺便我的搜索那部分代码可以简化吗?我觉得很累赘哦!谢谢!
...全文
691 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
barrytam 2006-11-19
  • 打赏
  • 举报
回复
正如楼上几位仁兄说的,用ViewState可以实现的,可能你用ViewState用得不对吧。
  • 打赏
  • 举报
回复

public string strSql="select * from viw_DriverInfo";
改为:
public string strSql{
get{
if(ViewState["strsql"]==null)
return "select * from viw_DriverInfo";
else
return (string)ViewState["strsql"];
}
set
{
ViewState["strsql"]=value;
}
}
JOHNCOOLS 2006-11-19
  • 打赏
  • 举报
回复
还是不行哦!使用viewsate后还是这样啊!!
palts520 2006-11-17
  • 打赏
  • 举报
回复
jellon_hero(大漠孤烟) 的
我支持
jellon_hero 2006-11-17
  • 打赏
  • 举报
回复
建议public string strSql="select * from viw_DriverInfo";
改成:
public static string strSql="select * from viw_DriverInfo";
jixiang1022 2006-11-17
  • 打赏
  • 举报
回复
请教viewSate应该怎样使用啊?可以举例吗?这个比较陌生哦!
chokobo 2006-11-17
  • 打赏
  • 举报
回复
楼主在定义strSql的时候前面加个static试试
gdxyxj 2006-11-17
  • 打赏
  • 举报
回复
可否这样:
在Gloabl.asax中定义一个Applicatoion变量来实现?
JOHNCOOLS 2006-11-17
  • 打赏
  • 举报
回复
请教viewSate应该怎样使用啊?可以举例吗?这个比较陌生哦!
chenghp 2006-11-17
  • 打赏
  • 举报
回复
这个简单,用个ViewState就可以解决了,Application小题大做了~呵呵
tete 2006-11-17
  • 打赏
  • 举报
回复
static,学习了,刚才有人问这个问题,有人建议他用Application
caibird1984 2006-11-17
  • 打赏
  • 举报
回复
.NET里每次与服务器交互的时候(就是常说的回发,PostBack事件),内存中的变量,无论全局或是局部变量都会重置为默认值——当然实际上是和.NET的生命周期有点关系,因为HTML代码输出到客户端之后服务器就不在保存状态了。所以解决的方案就是强制让服务器记录DataSet的值,比如利用static变量(不过这样可能会存在并发问题),或者把DataSet保存在ViewState、Session这样的对象里。不过从我自己的经验看,即使每次回发都进行查询速度也还是可以接受的,所以如果没有特殊要求,还是重新生成数据集再绑定吧
xtra6714 2006-11-17
  • 打赏
  • 举报
回复
初步分析是因为,查询完后,在点分页,页面回发了,也就是说这句:
public string strSql="select * from viw_DriverInfo";
被执行了,所以在SetBind(strSql);当然会用原来的字符串了



比较好的解决方法,本人认为还是用viewstate,没查之前选存上,查后在存,绑定时就用这个值,应该可以解决你的问题。
winsor_w 2006-11-17
  • 打赏
  • 举报
回复
静态变量用还是可以,但是你分页的时候,当有几个人同时访问服务器的时候,可能会出错
snoopymin 2006-11-17
  • 打赏
  • 举报
回复
加个static 就可以了...静态变量postback的时候不会被清空
chinalinx 2006-11-17
  • 打赏
  • 举报
回复
面对datagrid 我就想逃避,

哈哈。。。。

JOHNCOOLS 2006-11-17
  • 打赏
  • 举报
回复
关于搜索部分的代码有更好的算法吗?我觉得好累赘哦!

62,041

社区成员

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

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

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

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