本节讨论如何从现有的控件,进而扩展成强大的,更定制的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.待续…

转载于:https://www.cnblogs.com/shipfi/archive/2009/10/18/1585647.html

asp.net学习之扩展GridView相关推荐

  1. asp.net学习笔记 在GridView中添加链接

    2019独角兽企业重金招聘Python工程师标准>>> 恩 大概就是这两天做一个表 里面某个字段需要连接到一个百度地图的页面 然后 我只知道咋绑定数据不知道怎么将数据变成链接啊 然后 ...

  2. asp.net学习之GridView

    显示表格数据是软件开发中的一个周期性任务.ASP.NET 提供了许多工具来在网格中显示表格数据,例如 GridView 控件.通过使用 GridView 控件,您可以显示.编辑和删除多种不同的数据源( ...

  3. 13个 ASP.NET MVC 的扩展

    ASP.NET MVC设计的主要原则之一是可扩展性.处理管线(processing pipeline)上的所有(或大多数)东西都是可替换的.因此,如果您不喜欢ASP.NET MVC所使用的约定(或缺乏 ...

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

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

  5. Asp.net 一般处理程序+扩展

    在上一篇博客中,提到一般处理程序真的不一般.这篇博客主要是给大家解惑.由于最近在做项目的过程中,用到了很多的一般处理程序,相信你也一定用到过,但是你真的了解它吗? 介绍: 一般处理程序的一般是相对于a ...

  6. 手把手教你如何扩展GridView之自带CheckBox

    我们在使用GridView的时候,很多时候需要使用CheckBox列,比如批量删除,批量审批,但是每每都需要记住繁琐的实现方法.多麻烦呀!再次给GridView做个手术,让它自己就能产生CheckBo ...

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

    出处:www.knowsky.com 作者:www.knowsky.com <script language=JavaScript src="/ad/ad.js">&l ...

  8. Asp.Net中修改扩展名的问题

    关于Asp.Net中的扩展名修改问题,方法有很多种,而且有比较成熟的第三方组件.这方面的东西在老赵点滴上说的很明白.我在这里给大家介绍一种比较简单的方法通过配置IIS来实现. Framework1.1 ...

  9. 扩展GridView控件(7) - 行的指定复选框选中时改变行的样式

    GridView既强大又好用.为了让它更强大.更好用,我们来写一个继承自GridView的控件. [索引页] [×××] 扩展GridView控件(7) - 行的指定复选框选中时改变行的样式 作者:w ...

最新文章

  1. ArcGIS Server 9.3 beta 体验一 -- 安装
  2. linux查找用户前三进程_查看 Linux 系统中进程和用户的内存使用情况 | Linux 中国...
  3. js map遍历 修改对象里面的值_求职季之你必须要懂的原生JS(上)
  4. matlab pdist函数官方详解
  5. iOS 解决导航栏pop返回时出现黑块问题!
  6. Python os.path() 模块 详解 附算例
  7. 同步您的Google Chrome书签,主题等
  8. php 上传大文件400,PHP fastcgi模式上传大文件(大约有300多K)报错
  9. Problem G: 函数---判断日期(年月日)是否合法
  10. 常用NTP网络时间服务器整理
  11. 2015年7月15日 JS第一课(JS,声明变量,数据类型)
  12. 安徽省c语言程序设计省二题库,C语言程序设计题库二.pdf
  13. 基于php的学校固定资产管理系统
  14. 快速排序时间复杂度分析推导
  15. 最基本的25道深度学习面试问题和答案
  16. Graphene(石墨烯)区块传播技术能够实现10倍的更高效率
  17. Kubernetes init 提示 [ERROR ImagePull]: failed to pull image registry.aliyuncs.com/google_containers/c
  18. Inferred type S for type parameter S is not within its bound
  19. css 使用 :placeholder-shown 实现MaterialDesign风格的交互
  20. 树莓派一键变身无线路由器

热门文章

  1. 物联网 云计算 大数据 分布式
  2. opencv中的安全指针和指针对齐
  3. 只保留日期_全历手表与年历腕表都能看日期,为何唯独万年历腕表价格不菲?...
  4. python多元线性回归代码_Python实现梯度下降算法求多元线性回归(一)
  5. Wazuh--一个完善的开源EDR产品
  6. 大同大学计算机与网络工程学院,计算机与网络工程学院代表队 在第十一届“蓝桥杯”全国软件和信息技术人才大赛全国决赛中再获佳绩...
  7. (84)FPGA面试题-多bit跨时钟域
  8. (44)FPGA条件编译(选择语句)
  9. (32)System Verilog类class中构造函数new()示例
  10. (7)FPGA面试题Latch和Register区别