在页面上的使用,定义好了以上这些之后,在页面中该怎样用呢?
首先,在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");
这样我们需要的功能便实现了。