asp.net学习之扩展GridView
本节讨论如何从现有的控件,进而扩展成强大的,更定制的GridView控件
1.扩展BoundField
默认的BoundField不能显示多文本,文字一多,就会扩大整个Table的Height值,解决这个问题的方法可以通过TemplateField加入Div控件来解决,但是,也可以从BoundField类上进行扩展,加入一点特有的功能,让他能够显示多文本
例1: 创建长文本字段
===App_code\myControls.cs===
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===
<%@ 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字段
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相关推荐
- asp.net学习笔记 在GridView中添加链接
2019独角兽企业重金招聘Python工程师标准>>> 恩 大概就是这两天做一个表 里面某个字段需要连接到一个百度地图的页面 然后 我只知道咋绑定数据不知道怎么将数据变成链接啊 然后 ...
- asp.net学习之GridView
显示表格数据是软件开发中的一个周期性任务.ASP.NET 提供了许多工具来在网格中显示表格数据,例如 GridView 控件.通过使用 GridView 控件,您可以显示.编辑和删除多种不同的数据源( ...
- 13个 ASP.NET MVC 的扩展
ASP.NET MVC设计的主要原则之一是可扩展性.处理管线(processing pipeline)上的所有(或大多数)东西都是可替换的.因此,如果您不喜欢ASP.NET MVC所使用的约定(或缺乏 ...
- ASP.NETCore学习记录(一)
ASP.NETCore学习记录(一) asp.net core介绍 Startup.cs ConfigureServices Configure 0. ASP.NETCore 介绍 ASP.N ...
- Asp.net 一般处理程序+扩展
在上一篇博客中,提到一般处理程序真的不一般.这篇博客主要是给大家解惑.由于最近在做项目的过程中,用到了很多的一般处理程序,相信你也一定用到过,但是你真的了解它吗? 介绍: 一般处理程序的一般是相对于a ...
- 手把手教你如何扩展GridView之自带CheckBox
我们在使用GridView的时候,很多时候需要使用CheckBox列,比如批量删除,批量审批,但是每每都需要记住繁琐的实现方法.多麻烦呀!再次给GridView做个手术,让它自己就能产生CheckBo ...
- asp.net 2.0中用GRIDVIEW插入新记录
出处:www.knowsky.com 作者:www.knowsky.com <script language=JavaScript src="/ad/ad.js">&l ...
- Asp.Net中修改扩展名的问题
关于Asp.Net中的扩展名修改问题,方法有很多种,而且有比较成熟的第三方组件.这方面的东西在老赵点滴上说的很明白.我在这里给大家介绍一种比较简单的方法通过配置IIS来实现. Framework1.1 ...
- 扩展GridView控件(7) - 行的指定复选框选中时改变行的样式
GridView既强大又好用.为了让它更强大.更好用,我们来写一个继承自GridView的控件. [索引页] [×××] 扩展GridView控件(7) - 行的指定复选框选中时改变行的样式 作者:w ...
最新文章
- ArcGIS Server 9.3 beta 体验一 -- 安装
- linux查找用户前三进程_查看 Linux 系统中进程和用户的内存使用情况 | Linux 中国...
- js map遍历 修改对象里面的值_求职季之你必须要懂的原生JS(上)
- matlab pdist函数官方详解
- iOS 解决导航栏pop返回时出现黑块问题!
- Python os.path() 模块 详解 附算例
- 同步您的Google Chrome书签,主题等
- php 上传大文件400,PHP fastcgi模式上传大文件(大约有300多K)报错
- Problem G: 函数---判断日期(年月日)是否合法
- 常用NTP网络时间服务器整理
- 2015年7月15日 JS第一课(JS,声明变量,数据类型)
- 安徽省c语言程序设计省二题库,C语言程序设计题库二.pdf
- 基于php的学校固定资产管理系统
- 快速排序时间复杂度分析推导
- 最基本的25道深度学习面试问题和答案
- Graphene(石墨烯)区块传播技术能够实现10倍的更高效率
- Kubernetes init 提示 [ERROR ImagePull]: failed to pull image registry.aliyuncs.com/google_containers/c
- Inferred type S for type parameter S is not within its bound
- css 使用 :placeholder-shown 实现MaterialDesign风格的交互
- 树莓派一键变身无线路由器
热门文章
- 物联网 云计算 大数据 分布式
- opencv中的安全指针和指针对齐
- 只保留日期_全历手表与年历腕表都能看日期,为何唯独万年历腕表价格不菲?...
- python多元线性回归代码_Python实现梯度下降算法求多元线性回归(一)
- Wazuh--一个完善的开源EDR产品
- 大同大学计算机与网络工程学院,计算机与网络工程学院代表队 在第十一届“蓝桥杯”全国软件和信息技术人才大赛全国决赛中再获佳绩...
- (84)FPGA面试题-多bit跨时钟域
- (44)FPGA条件编译(选择语句)
- (32)System Verilog类class中构造函数new()示例
- (7)FPGA面试题Latch和Register区别