asp.net学习之扩展GridView

简介: 原文:asp.net学习之扩展GridView   本节讨论如何从现有的控件,进而扩展成强大的,更定制的GridView控件 1.扩展BoundField        默认的BoundField不能显示多文本,文字一多,就会扩大整个Table的Height值,解决这个问题的方法可以通过T...
原文: asp.net学习之扩展GridView

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

1.扩展BoundField

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

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 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===

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 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字段

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 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.待续…


目录
相关文章
|
2月前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
32 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
32 0
|
3月前
|
PHP Windows
php扩展com_dndnet(PHP与.NET框架进行交互)
php扩展com_dndnet(PHP与.NET框架进行交互)
php扩展com_dndnet(PHP与.NET框架进行交互)
|
开发框架 程序员 API
【C#】.net core2.1,通过扩展状态代码页方法对404页面进行全局捕抓并响应信息
在开发一个网站项目时,除了异常过滤功能模块,还需要有针对404不存在的api接口和页面处理功能 本篇文章就来讲讲,如何自定义全局请求状态类来统一处理
184 0
|
开发框架 .NET 数据库连接
在ASP.NET中实现选中、编辑和删除GridView数据项
在ASP.NET中实现选中、编辑和删除GridView数据项
在ASP.NET中实现选中、编辑和删除GridView数据项
|
开发框架 前端开发 .NET
|
开发框架 前端开发 .NET
[原创]Asp.net MVC 学习之路-003(增删改查,后端手工,前端生成)
[原创]Asp.net MVC 学习之路-003(增删改查,后端手工,前端生成)
[原创]Asp.net MVC 学习之路-003(增删改查,后端手工,前端生成)
|
开发框架 前端开发 .NET
[原创]Asp.net MVC 学习之路-002
[原创]Asp.net MVC 学习之路-002
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0