全编辑WebGrid控件LrcGrid(6)——控件呈现

web|控件

全编辑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();
}

创建标题行buildTitle()方法,标题行也就的表头,根据设定标题内容属性colsA,这里我把每列的表头文字设成可触发服务器端排序事件的LinkButton,并在每一个可编辑的列头添加一个HtmlAnchor ▼ ,这个HtmlAnchor 调用客户端脚本chgEdit()函数,(脚本内容请参见《全编辑WebGrid控件LrcGrid(4)—— 脚本库和样式表》)将表格中的一列在正常和编辑模式间切换,如果属性设置允许删除,将在标题行添加"全部删除"的LinkButton

表头效果如下图所示:

private void buildTitle()
{
TableRow tr =new TableRow();
tr.BackColor = _titColor;
TableCell tc = new TableCell();
LinkButton lk = new LinkButton();
HtmlAnchor lkE = new HtmlAnchor();
if(colsA != null)
{
for(int i=0;i<colsA.Length;i++)
{
tc = new TableCell();
//tc.BackColor = _titColor;
//排序
if(_isSort)
{
//全编辑
lk = new LinkButton();
lk.ID = "LrcLk_" + i;
lk.Text = colsA[i];
lk.Command += new CommandEventHandler(lk_Command);
lk.CommandArgument = colsA[i];
tc.Controls.Add(lk);

}
else
{
tc.Controls.Add(new LiteralControl(colsA[i]));
}
if(isEditCol(i))
{
lkE = new HtmlAnchor();
lkE.ID = "lrcLkE_" + i;
lkE.InnerText = "▼";
lkE.HRef = "javascript:chgEdit(" + i + "," + this.ClientID + ");";
tc.Controls.Add(lkE);
}
tr.Cells.Add(tc);
}
if(_isDel)
{
tc = new TableCell();
lk = new LinkButton();
lk.ID = "LrcDelAll";
lk.Text = "全部删除";
lk.Command += new CommandEventHandler(lkDel_Command);
tc.Controls.Add(lk);
tr.Cells.Add(tc);
}
this.Rows.Add(tr);
}
}

创建数据行buildCol()方法,该方法遍历数据集中表的所有项,将数据源中的记录和字段显示成表单的行和列,根据设定的属性,在表格项中添加不同的控件,并将数据源中的值绑定到这些控件

不可编辑列:直接将数据项值写入TableCell.Text
非外

时间: 2024-09-19 19:41:21

全编辑WebGrid控件LrcGrid(6)——控件呈现的相关文章

全编辑WebGrid控件LrcGrid(4)—— 脚本库和样式表

web|脚本|控件|样式表 全编辑WebGrid控件LrcGrid(4)-- 脚本库和样式表 脚本库:包含了控件客户端操作的函数.包括: 将表格行切换到编辑模式的函数:chgEditRow(rowIndex,tab)() 将表格列切换到编辑模式的函数:chgEdit(colIndex,tab) 在客户端构造更新数据库的sql语句: BuildSql(tabName) 添加新记录的函数:AddRow(tab) 移除新添加行的函数: RemoveRow(tab)全部js代码: function ch

全编辑WebGrid控件LrcGrid(5)—— 构造函数、变量和属性

web|变量|函数|控件 全编辑WebGrid控件LrcGrid(5)-- 构造函数.变量和属性 LrcGrid从System.Web.UI.WebControls.Table继承,实现INamingContainer接口 元数据属性和构造函数:元数据声明了控件的标签和默认属性,构造函数为控件一些属性指定了默认值. [ ToolboxData("<{0}:LrcGrid runat=server></{0}:LrcGrid>"), DefaultProperty

全编辑WebGrid控件LrcGrid(3)——整体结构

web|控件 全编辑WebGrid控件LrcGrid(3)--整体结构 资源文件: LrcGrid使用两个引用文件:一个css样式表文件MyFSheet.css,一个js脚本库文件UpdArray_LRC.js. 样式表文件中存放着应用于文本框的样式表类,用于文本框处于不同模式(浏览.编辑.焦点)时的样式 1.隐藏(浏览)样式: .lrc_txt_hid {border-style:none;width:95; background:url(images/txt_back.gif);} 2.编辑

全编辑WebGrid控件LrcGrid(1)——概述

web|控件 全编辑WebGrid控件LrcGrid(1)--概述 LrcGrid是我去年写的一个全编辑的Grid控件,功能嘛,嘿嘿,就是对于SQLServerr的单个表的:增.删.改.浏览.排序.分页(那"查"呢,我写了一个万能查询的控件可以和LrcGrid控件结合使用,这样增.删.改.查.浏览.排序.分页就都OK了)等功能封装到一个服务器控件中,用的时候只要设置一些属性就OK了. LrcGrid控件可在客户端进行批量编辑,并且从浏览模式到编辑模式的切换是在客户端完成的.所以速度还是

全编辑WebGrid控件LrcGrid(2)——用法

web|控件 用法比较简单,不必写一行代码(这是我的控件编写的主要目的之一). 共有三步: 第一步:在页面中引用脚本库和CSS样式表库,本来是可以封闭到资源文件中的,这一步懒得做了:) 代码如下: <LINK href="MyFSheet.css" type="text/css" rel="stylesheet"> <script language="javascript" src="UpdArra

求:邮件编辑控件,类似于OutLook编辑、接受、发送邮件的控件!

问题描述 各位:有没有用过类似于OUTLOOK编辑.接受.发送邮件的控件(支持MIME解码),.NETWinForm控件.有用过的麻烦留一个链接,谢谢! 解决方案 解决方案二:发送邮件有专门的邮局协议snmtp或者pop3这个控件可以自己弄!解决方案三:自己顶一下

重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow

原文:重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow [源码下载] 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockO

asp.net学习之 数据绑定控件--表格绑定控件

原文:asp.net学习之 数据绑定控件--表格绑定控件     数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件是将其他 ASP.NET Web 控件(例如 Label 和 TextBox 控件)组合到单个布局中的复合控件.     例如,诸如 DetailsView 控件等数据绑定控件可绑定到一个结果集,例如,包含每个雇员的姓名.地址.职务等信息的雇员表.在 DetailsView 控件中,可以将 Labe

重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup

原文:重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border, Viewbox, Popup [源码下载] 重新想象 Windows 8 Store Apps (3) - 控件之内容控件: ToolTip, Frame, AppBar, ContentControl, ContentPresenter; 容器控件: Border,