全编辑webgrid控件lrcgrid(6)——控件呈现
创建子控件
重写createchildcontrols()过程,调用创建子控件的方法rebuild()每当 asp.net 页框架需要创建控件树时就会调用createchildcontrols()方法,且该方法调用并不限于控件生命周期的特定阶段。例如,可以在加载页时、在绑定数据过程中或者在呈现过程中调用createchildcontrols
protected override void createchildcontrols()
{
this.rebuild();
}
重写onprerender(eventargs e)过程,注册客户端脚本块,此脚本可使用户回车时进行焦点跳转,注释掉的部分为使用资源文件的方法.
protected override void onprerender(eventargs e)
{
base.onprerender (e);
if(this._istabchg)
{
if(!page.isclientscriptblockregistered("lrc_chgtab"))
{
string str_chgtab = @"<script language='javascript' event='onkeydown' for='document'>
<!--
if(event.keycode==13 && event.srcelement.type!='button' && event.srcelement.type!='submit' && event.srcelement.type!='reset' && event.srcelement.type!='')
event.keycode=9;
-->
</script>";
page.registerclientscriptblock("lrc_chgtab",str_chgtab);
}
}
/*
*
resourcemanager manager = new resourcemanager(this.gettype());
resourceset resources = manager.getresourceset(system.globalization.cultureinfo.currentculture,true,true);
if(!page.isclientscriptblockregistered("liuruicai.lrcgrid.script"))
{
string script = resources.getstring("clientscript");
this.page.registerclientscriptblock("liuruicai.lrcgrid.script",script);
string style = resources.getstring("clientstyle");
this.page.registerclientscriptblock("liuruicai.lrcgrid.style",style);
}
*/
}
rebuild()方法,当在运行时改变了控件属性,可调用此方法重新构造控件,它调用一系列的内部过程:管理视图状态,清空子控件,重新初始化数据集,创建标题行、创建数据行、创建操作行等:
/// <summary>
/// 重新构造控件
/// </summary>
public void rebuild()
{
if(this.currentpageindex == -1)
this.currentpageindex = 0;
this.controls.clear();
this.clearchildviewstate();
this.attributes.add("isdel",this._isdel.tostring());
this.attributes.add("isadd",this._isadd.tostring());
this.dbset = null;
base.createchildcontrols ();
//创建标题行
buildtitle();
initdataset();
if(this.dbset != null)
{
if(this.dbset.tables.count > 0)
{
if(this.dbset.tables[0].rows.count > 0)
{
//创建数据行
buildcol();
}
}
}//创建操作行
buildoper();
}