ASP.net自定义服务器控件之GridViewControl

根据项目需要,提供自定义服务器控件之 GridViewControl,提供数据为空时的自定义显示。

[DefaultProperty("EnableEmptyContentRender")]
[ToolboxData("<{0}:GridViewControl runat=server></{0}:GridViewControl>")]
public class GridViewControl : System.Web.UI.WebControls.GridView
{
     /// <summary>
     /// 是否数据为空时显示标题行
     /// </summary>
     private bool _enableEmptyContentRender = true;
     /// <summary>
     /// 是否数据为空时显示标题行
     /// </summary>
     [Bindable(true)]
     [Category("Appearance")]
     [DefaultValue("")]
     [Localizable(true)]
     public bool EnableEmptyContentRender
     {
         set { _enableEmptyContentRender = value; }
         get { return _enableEmptyContentRender; }
     }
     /// <summary>
     /// 是否数据为空时显示标题行
     /// </summary>
     private string _EmptyDataCellCssClass;
     /// <summary>
     /// 为空时信息单元格样式类
     /// </summary>
     [Bindable(true)]
     [Category("Appearance")]
     [DefaultValue("")]
     [Localizable(true)]
     public string EmptyDataCellCssClass
     {
         set { _EmptyDataCellCssClass = value; }
         get { return _EmptyDataCellCssClass; }
     }
     /// <summary>
     /// 为空时输出内容
     /// </summary>
     /// <param name="writer"></param>
     protected virtual void RenderEmptyContent(HtmlTextWriter writer)
     {
         //Create Header Table
         Table tblHeader = new Table();
         //Copy All Property
         tblHeader.CssClass = this.CssClass;
         tblHeader.GridLines = this.GridLines;
         tblHeader.BorderStyle = this.BorderStyle;
         tblHeader.BorderWidth = this.BorderWidth;
         tblHeader.CellPadding = this.CellPadding;
         tblHeader.CellSpacing = this.CellSpacing;
         tblHeader.HorizontalAlign = this.HorizontalAlign;
         tblHeader.Width = this.Width;
         tblHeader.CopyBaseAttributes(this);
         TableRow rowHeader = new TableRow();
         tblHeader.Rows.Add(rowHeader);
         rowHeader.CssClass = "TableHeader";
         //Generate Table Header
         foreach (DataControlField f in this.Columns)
         {
             TableCell cell = new TableCell();
             cell.Text = f.HeaderText;
             rowHeader.Cells.Add(cell);
         }
         TableRow rowBody = new TableRow();
         tblHeader.Rows.Add(rowBody);
         TableCell cellBody = new TableCell();
         cellBody.CssClass = this._EmptyDataCellCssClass;
         if (this.EmptyDataTemplate != null)
             //the second row, use the template
             this.EmptyDataTemplate.InstantiateIn(cellBody);
         else
             //the second row, use the EmptyDataText
             cellBody.Text = this.EmptyDataText;
         cellBody.HorizontalAlign = HorizontalAlign.Left;
         cellBody.ColumnSpan = this.Columns.Count;
         rowBody.Cells.Add(cellBody);
         tblHeader.RenderControl(writer);
     }
     protected override void Render(HtmlTextWriter writer)
     {
         if (_enableEmptyContentRender && (this.Rows.Count == 0 || this.Rows[0].RowType ==  DataControlRowType.EmptyDataRow))
             RenderEmptyContent(writer);
         else
             base.Render(writer);
     }
}

本文出自 “学习成就梦想” 博客,请务必保留此出处http://qijinchao.blog.51cto.com/1140455/263635

时间: 2024-11-01 03:05:04

ASP.net自定义服务器控件之GridViewControl的相关文章

asp.NET自定义服务器控件内部细节

如大家要转载,请保留本人的版权:/* *Description:asp.NET自定义服务器控件内部细节系列教程*Auther:崇崇-天真的好蓝 *MSN:chongchong2008@msn.com *Dates:2007-05-20*Copyright:ChongChong2008 YiChang HuBei China */ 关于自定义asp.NET自定义服务器控件文章和源码示例网上已经很多了,不过有些内部些节方面,让一些初次接触这方面技术的朋友难以理解,对服务器控件的方方面面也很疑惑.为此

asp.net 自定义服务器控件权威资料

最近公司安排做一个自定义的可重用的控件 ,一直搞c/s 的,突然让我搞 b/s 还真有点不习惯,搁置了2年的web思想早已经陈旧了,要恶补一下了.asp.net 服务器控件最权威的资料 MSDN: 演练:开发和使用自定义服务器控件http://msdn.microsoft.com/zh-cn/library/yhzc935f.aspx 演练:为 Web 服务器控件创建基本控件设计器http://msdn.microsoft.com/zh-cn/library/12yydcke.aspx ASP.

ASP.net自定义服务器控件TextBox

基于项目需要,针对ASP.net服务器控件TextBox进行改造,使其增加字符串输入提示功能,在控件获得焦点时,与普通的服务器端 TextBox 控件相同,支持数据输入.当控件失去焦点并且文本框内容为空时,显示预定义的提示文本.用户输入"预定义的提示文本"为文本内容时, 默认文本框Text值为空字符串. [DefaultProperty("Text")] [ToolboxData("<{0}:TextBox runat=server></

ASP.NET2.0服务器控件之自定义状态管理

asp.net|服务器|控件 在前面的系列文章中,我们曾经介绍了视图状态和控件状态的基本概念和典型应用,从中可以发现,视图状态和控件状态对于自定义服务器控件实现的重要性.本文将继续这一主题,重点介绍实现视图状态和控件状态自定义管理的方法. 自定义视图状态管理 在介绍视图状态时,我们曾经提到过:对于简单属性,例如,String.Int等类型,.NET执行引擎将自动启用默认视图状态管理机制,以便完成相应的功能.然而,如果开发人员在ViewState中保存的是自定义数据类型,或者需要实现自定义方式优化

ASP.NET2.0服务器控件之自定义状态管理_实用技巧

     在前面的系列文章中,我们曾经介绍了视图状态和控件状态的基本概念和典型应用,从中可以发现,视图状态和控件状态对于自定义服务器控件实现的重要性.本文将继续这一主题,重点介绍实现视图状态和控件状态自定义管理的方法. 自定义视图状态管理 在介绍视图状态时,我们曾经提到过:对于简单属性,例如,String.Int等类型,.NET执行引擎将自动启用默认视图状态管理机制,以便完成相应的功能.然而,如果开发人员在ViewState中保存的是自定义数据类型,或者需要实现自定义方式优化视图状态管理时,则必

ASP.NET2.0服务器控件之创建自定义控件

asp.net|创建|服务器|控件 摘要 本文将详细讲解一个简单的自定义服务器控件的创建过程.通过这些内容,读者将了解利用Visual Studio 2005,创建和测试自定义服务器控件的基本方法. 注意:本文内容基于ASP.NET 2.0技术撰写,示例应用程序使用Visual Studio 2005进行开发. 创建一个简单的自定义服务器控件 创建自定义服务器控件的过程包括: (1)创建一个测试用Web站点应用程序: (2)为新建站点应用程序,新增一个Web控件库项目: (3)编写.编译和测试自

ASP.NET2.0服务器控件之Render方法

asp.net|服务器|控件 控件呈现是指向HTTP输出流中写入标记文本的过程.服务器通过HTTP输出流向客户端发送生成的标记文本,这些文本将会通过客户端浏览器转换为可视化的元素显示出来.使用控件呈现,开发人员可以将HTML标记.脚本代码.CSS样式表等等输入到客户端浏览器.实现服务器控件呈现主要有两种方式:一是Control类的Render方法,二是WebControl的RenderContents方法.本文重点介绍使用Control类的Render方法实现控件呈现的应用. 使用HtmlTex

ASP.NET2.0服务器控件之创建复杂属性

asp.net|创建|服务器|控件 上一篇文章介绍了实现3种形式复杂属性的具体方法.为了加深读者对于这些实现方法的理解深度,本文详细讲解了一个利用ASP.NET 2.0技术创建复杂属性的示例. 1. 示例应用 本文所实现的示例很简单,其核心是通过实现自定义服务器控件的连字符形式复杂属性来说明复杂属性的实现方法,其中使用了上一篇文章中介绍的内容.示例效果图如图1所示. 图1 如图1所示,页面显示了公司所在城市.姓名.性别和职务信息.这些内容是定义服务器控件呈现的结果,其中公司所在城市由简单属性Ci

ASP.NET2.0服务器控件开发之实现事件

asp.net|服务器|控件|控件开发 前面几篇文章讲解了与利用ASP.NET 2.0技术创建自定义服务器控件属性有关的内容.从本文开始,包括随后的几篇文章将探讨创建自定义服务器控件事件的方法.本文重点对实现控件事件的基本概念进行介绍,这些概念对于帮助开发人员为服务器控件创建事件有着重要意义. 1. 事件基本概念 事件是当有动作发生或者状态改变时,类发出的信息或者通知.通常情况下,状态的发生或者改变由用户界面动作初始化,例如,单击按钮,或者由于其他的程序逻辑引起.产生事件的类或者说发送通知的类叫