原文:asp.net学习之扩展GridView

本节讨论如何从现有的控件,进而扩展成强大的,更定制的GridView控件

1.扩展BoundField

默认的BoundField不能显示多文本,文字一多,就会扩大整个Table的Height值,解决这个问题的方法可以通过TemplateField加入Div控件来解决,但是,也可以从BoundField类上进行扩展,加入一点特有的功能,让他能够显示多文本
例1: 创建长文本字段
===App_code\myControls.cs===

Codenamespace myControls{    // 自定义GridView的Field字段,该字段能够在显示模式下    // 显示多行文本,在编辑模式下显示多行输入框    public class LongTextField:  BoundField   // 继承BoundField    {        private Unit _width = new Unit("250px");        private Unit _height = new Unit("60px");        // LongTextField有两个属性,分别是Widht和Height.        public Unit Width {            get { return _width; }            set { _width = value; }        }        public Unit Height {            get { return _height; }            set { _height = value; }        }        // InitializeDataCell 方法是一种帮助器方法,用于初始化 BoundField 对象中的单元格        // 扩展 BoundField 类时,可以重写该方法,以执行自定义初始化例程。        protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState)        {            // 不处于编辑模式下            if((rowState&DataControlRowState.Edit)==){                HtmlGenericControl div = new HtmlGenericControl("div"); //创建一个Html中的div控件                div.Attributes["class"] = "longTextField";                 //通过HtmlTextWriterStyle设置div控件的样式                div.Style[HtmlTextWriterStyle.Width] = _width.ToString();                div.Style[HtmlTextWriterStyle.Height] = _height.ToString();                div.Style[HtmlTextWriterStyle.Overflow] = "auto";                // div控件的DataBinding事件发生时,调用div_DataBinding函数                div.DataBinding += new EventHandler(div_DataBinding);                cell.Controls.Add(div);            } else {                TextBox txtEdit = new TextBox();                txtEdit.TextMode = TextBoxMode.MultiLine;                txtEdit.Width = _width;                txtEdit.Height = _height;                // txtEdit的DataBinding事件发生时,调用txtEdit_DataBinding函数                txtEdit.DataBinding += new EventHandler(txtEdit_DataBinding);                cell.Controls.Add(txtEdit);            }        }        void div_DataBinding(object sender,EventArgs e)        {            HtmlGenericControl div = (HtmlGenericControl)sender;  // 取得控件            object value = this.GetValue(div.NamingContainer); // Get the field value;            div.InnerText = this.FormatDataValue(value, this.HtmlEncode); // Assign the formatted value        }        void txtEdit_DataBinding(object sender,EventArgs e)        {            TextBox txtEdit = (TextBox)sender;            Object value = this.GetValue(txtEdit.NamingContainer); // Get the field value            txtEdit.Text = this.FormatDataValue(value, this.HtmlEncode);        }    }}

===custer_list.aspx===

Code<%@ Register TagPrefix="custom" Namespace="myControls" %>  <!-- 引入LongTextField类型 --><asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"             DataKeyNames="Id" DataSourceID="SqlDataSource1">         <Columns>                <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False"  ReadOnly="True" SortExpression="Id" />                <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />                <asp:BoundField DataField="Director" HeaderText="Director"  SortExpression="Director" />                <custom:LongTextField DataField="Description" Width="300px" height="60px" HeaderText="Movie Description" />         </Columns></asp:GridView>

2.扩展ButtonField

扩充的ButtonField能够具有警告作用,即在点击时能够弹出确认消息。
例2:扩展ButtonField字段

Codepublic class DeleteButtonField : ButtonField{    private string _confirmMessage = "确认要删除吗?";    public string ConfirmMessage    {        get { return _confirmMessage; }        set { _confirmMessage = value; }    }    // 默认情况下,作为删除按钮,按钮上显示删除字样    public DeleteButtonField()    {        this.CommandName = "Delete";        this.Text = "删除";    }    public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex)    {        base.InitializeCell(cell, cellType, rowState, rowIndex);        if(cellType==DataControlCellType.DataCell) //如果是数据Cell        {            WebControl button = (WebControl)cell.Controls[];            button.Attributes["onclick"] = String.Format("return confirm('{0}');", _confirmMessage);        }    }}

3.待续…

asp.net学习之扩展GridView的更多相关文章

  1. asp.net学习之GridView事件、GridViewRow对象

    原文:asp.net学习之GridView事件.GridViewRow对象 1. GridView控件的事件 GridView有很多事件,事件可以定制控件的外观或者行为.事件分为三类     1.1 ...

  2. asp.net学习之GridView七种字段

    原文:asp.net学习之GridView七种字段 asp.net中GridView绑定到数据源时,可以自动显示数据源的各个字段.只要设定其AutoGenerateColumns为TRUE即可.但这, ...

  3. asp.net学习之数据绑定控件、数据源控件概述

    原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细:      ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字 ...

  4. asp.net学习之DataList控件

    asp.net学习之DataList控件   DataList控件与Repeater控件一样由模板驱动,与Repeater控件不同的是: DataList控件默认输出是一个HTML表格.DataLis ...

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

    原文:asp.net学习之 数据绑定控件--表格绑定控件     数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件 ...

  6. asp.net学习之ado.net(连接模式访问)

    原文:asp.net学习之ado.net(连接模式访问)    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连 ...

  7. asp.net学习之ado.net(无连接模式中的DataAdapter)

    原文:asp.net学习之ado.net(无连接模式中的DataAdapter) 在非连接模式下,主要讨论以下对象:DataAdapter.     DataAdpater的作用是在物理存储模式的数据 ...

  8. asp.net学习之SqlDataSource

    原文:asp.net学习之SqlDataSource 通过 SqlDataSource 控件,可以使用 Web 服务器控件访问位于关系数据库中的数据.其中可以包括 Microsoft SQL Serv ...

  9. ASP.NETCore学习记录(一)

    ASP.NETCore学习记录(一) asp.net core介绍  Startup.cs  ConfigureServices  Configure  0. ASP.NETCore 介绍 ASP.N ...

随机推荐

  1. C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从【网路图片】、【Assets资源】、【UI】修改锁定画面。

    原文:C# Windows Phone App 开发,自制LockScreen 锁定画面类别(Class),从[网路图片].[Assets资源].[UI]修改锁定画面. 一般我们在开发Windows ...

  2. 查看hadoop管理页面,修改本地hosts,Browse the filesystem

    问题: hadoop管理界面,ip:50070,中点击Browse the filesystem会出现网页无法访问,看地址栏,是集群中的主机名::50075/browseDirectory.jsp?n ...

  3. OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

    1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件( ...

  4. 【6】和作为连续序列s

    称号:输入一个整数s,并打印出所有s整数的连续序列(含有至少2的数量). 如输入9,输出2.3.4和4.5两个序列 方案一:因为序列至少要2个数,则两个数上限值为(1+s)/2,我们能够枚举该序列的起 ...

  5. effective c++ 条款13 use object to manage resources.

    请求的系统资源需要最终还回系统,为了避免遗忘返还这个动作,可以利用析构函数在object销毁时自动调用的特点来实现. 简单说就是用object来管理资源. 以内存资源为例 class Investme ...

  6. Byte[]和BASE64之间的转换

    一. BASE64编码 把byte[]中的元素当做无符号八位整数转换成只含有64个基本字符的字符串,这些基本字符是: l 大写的A-Z l 小写的a-z l 数字0-9 l '+' 和 '/' l 空 ...

  7. NET5实践:项目创建-结构概述-程序运行-发布部署

    ASP.NET5实践01:项目创建-结构概述-程序运行-发布部署   1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project ...

  8. POJ 1176 Party Lamps (DFS)

    对于一束灯光.提供四种改变彩灯状态(ON<=>OFF)的操作:a.改变全部彩灯状态:b.改变奇数彩灯状态.c.改变偶数彩灯状态:d.改变3k+1号彩灯状态(1,4,7,10...). 给定 ...

  9. int a[5]={1,2,3,4,5};printf(&quot;%d\n&quot;, *((int*)(&amp;a+1)-2);

    有说服力的笔试题有一定的期限,问:什么是结果,答案是4,为什么要挤? 我明白(不知道是不正确): &a这是一个数组指针,类型int[5],然后&a添加1其实a+sizeof(int)* ...

  10. windows下VC界面 DIY系列1----写给想要写界面的C++程序猿的话

    非常早就想写关于C++ UI开发的一系列博文,博客专栏刚审核通过,就立即開始刷博文,不能辜负自己的一番热血,我并非写界面的高手,仅仅想通过写博文提高我自己的技术积累,也顺便帮助大家解决界面开发的瓶颈. ...