欢迎光临
我们一直在努力

页面无限跳转间如何保存页面状态 (3)-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

在页面上的使用,定义好了以上这些之后,在页面中该怎样用呢?

首先,在list页面中实现ipageinfo接口:

public class rolelist : system.web.ui.page,ipageinfo

然后针对每一个datagrid实例化一个datainfo对象:

protected datainfo datainfo = new datainfo("role");

接着写一些处理datagrid状态的代码,我是使用的属性:

#region 数据网格状态信息

private system.collections.hashtable searchparams

{

get

{

if (viewstate["searchparams"] != null)

{

return (hashtable)viewstate["searchparams"];

}

else

return null;

}

set

{

viewstate["searchparams"] = value;

}

}

private system.collections.hashtable otherdataparams

{

get

{

if (viewstate["otherdataparams"] != null)

{

return (hashtable)viewstate["otherdataparams"];

}

else

return null;

}

set

{

viewstate["otherdataparams"] = value;

}

}

private int currentpage

{

get

{

return mydatagrid.currentpageindex;

}

set

{

mydatagrid.currentpageindex = value;

mydatagrid.databind();

navigaterole.currentpage = mydatagrid.currentpageindex + 1;

navigaterole.totalpages = mydatagrid.pagecount;

}

}

private string sortexpression

{

get

{

return dssystem.role.defaultview.sort;

}

set

{

dssystem.role.defaultview.sort = value;

mydatagrid.databind();

navigaterole.totalpages = mydatagrid.pagecount;

}

}

private string itemid

{

get

{

if (mydatagrid.selectedindex >= 0)

{

return mydatagrid.datakeys[mydatagrid.selectedindex].tostring();

}

else

return null;

}

set

{

int pageindex = mydatagrid.currentpageindex;

bool find = false;

for( int j = 0; j < mydatagrid.pagecount && find == false; j++)

{

mydatagrid.currentpageindex = j;

mydatagrid.databind();

for(int i = 0; i < mydatagrid.items.count; i++)

{

if (mydatagrid.datakeys[i].tostring() == value)

{

find = true;

break;

}

}

}

if (find == false)

{

mydatagrid.currentpageindex = pageindex;

mydatagrid.databind();

}

navigaterole.currentpage = mydatagrid.currentpageindex + 1;

navigaterole.totalpages = mydatagrid.pagecount;

}

}

#endregion

在pageload中取出前一页面的数据,进行处理,注意,从前一页面过来用的是server.transfer方法:

ipageinfo pageinfo = null;

//取出前一页面的信息并保存数据网格状态的信息

try

{

pageinfo = (ipageinfo)context.handler;

}

catch {}

if (pageinfo != null)

{

if (pageinfo.otherparams != null)

otherparams = pageinfo.otherparams;

if (pageinfo.datainfos != null)

{

//保存全部datagrid信息

datainfos = pageinfo.datainfos;

//取出当前datagrid的信息

if (pageinfo.datainfos[datainfo.dataname] != null)

{

datainfo = pageinfo.datainfos[datainfo.dataname];

}

}

}

把数据取出来了然后自然就是处理了,我是设置前面那些属性的值的,实际上方法有很多种,这里就不详述了。

ipageinfo的实现,其中处理datainfos属性时要更新页面上每一个datagrid对应的datainfo的信息,以反映最近的更改:

public string pagename

{

get

{

return "rolelist";

}

}

public hashtable otherparams

{

get

{

if (viewstate["otherparams"] != null)

{

return (hashtable)viewstate["otherparams"];

}

else

return null;

}

set

{

viewstate["otherparams"] = value;

}

}

public datainfolist datainfos

{

get

{

//更新数据网格状态信息

datainfolist datainfolist;

if (viewstate["datainfos"] != null)

datainfolist = (datainfolist)viewstate["datainfos"];

else

datainfolist = new datainfolist();

datainfo.currentpage = currentpage;

datainfo.itemid = itemid;

datainfo.otherparams = otherdataparams;

datainfo.searchparams = searchparams;

datainfo.sortexpression = sortexpression;

datainfolist[datainfo.dataname] = datainfo;

return datainfolist;

}

set

{

viewstate["datainfos"] = value;

}

}

跳转到其他页面(如详细页面):

server.transfer("roledetail.aspx");

对于detail页面,会比较简单一些,因为基本上没有datinfo更新的问题,旨在删除和新增时需要修改itemid:

也是先实现接口:

public class roledetail : system.web.ui.page,ipageinfo

接着定义两个变量,一个保存前页来的数据,一个定义当前的数据类别,也就是要对哪一个datainfo实例进行操作:

protected ipageinfo pageinfo;

protected string dataname = "role";

pageload取出前页数据并处理当前项数据:

try

{

pageinfo = (ipageinfo)context.handler;

}

catch

{

}

//取出当前项的id

if (pageinfo != null && pageinfo.datainfos != null)

{

datainfos = pageinfo.datainfos;

}

//取详细数据

if (datainfos != null && datainfos[dataname].itemid != null)

getitemdata();

else

getnulldata();

接口的实现:

public string pagename

{

get

{

return "roledetail";

}

}

public datainfolist datainfos

{

get

{

if (viewstate["datainfos"] != null)

{

return (datainfolist)viewstate["datainfos"];

}

else

return null;

}

set

{

viewstate["datainfos"] = value;

}

}

public hashtable otherparams

{

get

{

if (viewstate["otherparams"] != null)

{

return (hashtable)viewstate["otherparams"];

}

else

return null;

}

set

{

viewstate["otherparams"] = value;

}

}

#endregion

跳转到其他页面(如返回list):

server.transfer("rolelist.aspx");

这样我们需要的功能便实现了。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 页面无限跳转间如何保存页面状态 (3)-.NET教程,Asp.Net开发
分享到: 更多 (0)