asp.net学习之扩展GridView

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

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

1.扩展BoundField

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

Code
namespace 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)==0){
                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字段

Code
public 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[0];
            button.Attributes["onclick"] = String.Format("return confirm('{0}');", _confirmMessage);
        }
    }
}

 

3.待续…

时间: 2024-08-03 16:05:09

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

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

原文:asp.net学习之GridView事件.GridViewRow对象 1. GridView控件的事件     GridView有很多事件,事件可以定制控件的外观或者行为.事件分为三类     1.1 GridView显示数据时的事件           ● DataBinding : 在绑定数据源之前触发 [继承自Control]           ● DataBound 在绑定到数据源后触发           ● RowCreated 创建每一行时触发           ● Ro

asp.net学习之GridView七种字段

原文:asp.net学习之GridView七种字段     asp.net中GridView绑定到数据源时,可以自动显示数据源的各个字段.只要设定其AutoGenerateColumns为TRUE即可.但这,自动显示有其不好的一面,因为不能自义定控制显示的样式.     解决以上的办法就是指定需要GridView显示的字段,GridView控件支持以下七种类型的Field:       ● BoundField   :  将数据项显示为文本       ● CheckBoxField : 将数据

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

原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细:      ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字段进行绑定.显示一个字段下所有数据的信息.           它包括以下几个控件:BulletedList.CheckboxList.DropDownList.ListBox.RadioButtonList           具体的参照以下文章:  http://www.cnblogs.com/

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

原文:asp.net学习之ado.net(连接模式访问)    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连接模式访问数据库中的数据,利用ADO.NET中的Connection,Command,DataReader来获取和修改数据库中的数据 1. 连接模式的数据访问      连接模式要使用到的三个核心类:      ● IDBConnection : 表示数据源的连接,所有Connection类的基类

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

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

asp.net学习之DataList控件

原文:asp.net学习之DataList控件      DataList控件与Repeater控件一样由模板驱动,与Repeater控件不同的是: DataList控件默认输出是一个HTML表格.DataList在输出时已经在相应的模板上套上了表格标签,而Repeater则是模板是什么样,输出就是什么样. 1. DataList显示数据 例1:使用DataList显示数据    Code<asp:DataList ID="DataList1" runat="serve

asp.net 2.0中用GRIDVIEW插入新记录

asp.net|插入 看了下国外某巨牛的BLOG,大概是讲asp.net 2.0中用GRIDVIEW插入新记录的,方法比较特别,但效果一般,故将程序转之,较为简单,不做解释等.<%@ Page Language="C#" ClassName="Default_aspx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/

ASP的几大可扩展组件(一)

    ASP的几大可扩展组件(一)     对于ASP的扩展组件,有些大家已耳熟能详,有些则还陌生的很,写这篇文章的的意图无非想抛砖引玉,在各位对ASP几大对象已烂熟于心时,不妨玩玩一些不常用的可扩展组件,相信会对各位的ASP编程有很大的启发.(这篇文章的内容来自MSDN,对其了若指掌的朋友自不必看.还有,小妹的耐 心不好,如果写完了这篇没有长性就此罢笔,望各位在大骂的时候留点口德,多谢多谢.):b     Browser Capabilities Component--浏览器性能组件    

ASP的几大可扩展组件(二)

ASP的几大可扩展组件(二)     上回说到浏览器性能组件(Browser Capabilities Component)的使用方法,本回接着前文,介绍如何编写或升级Browsercap.ini文件. Browscap.ini文件     你可以在Browscap.ini文件中描述任意多个浏览器的属性.你也可以设置一套默认属性,当浏览器发送的报头无法和Browscap.ini中的任何条目匹配时,浏览器类型(BrowerType)对象会假设该浏览器具备默认的属性.     每个浏览器定义由一个H