惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

博客园 - jierry

ASP.NET2.0控件一览---标准控件(2) ASP.NET2.0控件一览---标准控件(1) 控件开发时两种JS嵌入资源方式的使用 - jierry - 博客园 T-SQL tips(1)临时表和表变量 Flash Control for ASP.NET 2.0-Include Flash movies in your aspx pages 为DataGrid创建自定义列控件(四) 为DataGrid创建自定义列控件(三) - jierry - 博客园 为DataGrid创建自定义列控件(二) (转)SQLServer和Oracle的常用函数对比 《Effective C#》读书笔记(4) 《Effective C#》读书笔记(3) 《Effective C#》读书笔记(2) 《Effective C#》读书笔记(1) 选择合适的数据控件 自带图层的链接控件(DKLinks 1.0.0.323 ) 关于CodeBuild V3.0的一些想法 小工具:SQL存储过程解密修改工具 交叉表应用-成绩统计 现在提供第一版的存储过程生成器下载,欢迎大家试用
为DataGrid创建自定义列控件(一)
jierry · 2005-10-28 · via 博客园 - jierry

DataGrid中为我们提供了5种常用的列控件

•      BoundColumn
•      ButtonColumn
•      EditCommandColumn
•      HyperLinkColumn
•      TemplateColumn

通常情况下,这5种列控件都能够完成我们大部分的开发,但是有时遇到特殊情况下,为了简化开发,自定义列控件就派上的用场。
在开发以前,让我们先来了解下列控件的基础知识:
所有的列控件都是来自System.Web.UI.WebControls命名空间,比如BoundColumn来自System.Web.UI.WebControls.BoundColumn命名空间。所有的这些控件都来自DataGridColumn类。

DataGridColumn类具有的属性:

FooterStyle      获取列的脚注部分的样式属性。
FooterText      获取或设置列的脚注部分中显示的文本。
HeaderImageUrl      获取或设置列的页眉节中显示的图像的位置。
HeaderStyle      获取列的页眉节的样式属性。
HeaderText      获取或设置在列的页眉节中显示的文本。
ItemStyle      获取列的项单元格的样式属性。
SortExpression      获取或设置选择进行排序的列时传递到 OnSortCommand 方法的字段或表达式的名称。
Visible      获取或设置一个值,该值指示此列在 DataGrid 控件中是否可见。

DataGridColumn类有两个很重要的方法必须提出,一是Initialize方法,二是InitializeCell方法。Initialize方法提供基实现以将从 DataGridColumn 类派生的列重置为它的初始状态。InitializeCell 方法提供基实现以将从 DataGridColumn 类派生的列中的指定单元格重置为它的初始状态。(具体这两个方法的说明请大家自行查阅)

好了,说了那么多废话,让我们马上进入到自定义列控件的开发。
我们先来做一个非常简单的列控件,功能就是显示指定的文字。
首先创建一个类库项目,命名为SimpleColumn,然后创建继承自DataGridColumn类的HelloColumn类,代码如下:

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SimpleColumn
{
      
/// <summary>
      
/// Class1 的摘要说明。
      
/// </summary>

      public class HelloColumn : DataGridColumn
      
{
            
public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)
            
{
                  
base.InitializeCell (cell, columnIndex, itemType);
                  
if((itemType == ListItemType.AlternatingItem)||(itemType == ListItemType.SelectedItem)||(itemType == ListItemType.Item))
                  
{
                        cell.Text 
= "Hello";
                  }

            }


      }

}


最后在页面上引用这各类

<%@ Register TagPrefix="custCols" Namespace="SimpleColumn" Assembly="SimpleColumn" %>

在DataGrid中添加Column,如下:

<Columns>
      
<custcols:HelloColumn></custcols:HelloColumn>
</Columns>

最后效果:
 
        这样一个简单的自定义列控件就创建好了,是不是很简单呢?由于是继承DataGridColumn类,所以在显示的时候大家还可以设置这个列控件的页眉文字等属性。
     
        接下来,我们再来创建一个带自定义属性的列控件。这个列控件主要完成的任务就是可以自定义文字的显示个数,多余的部分用…显示,相信大家经常遇到这样的情况吧。
        首先我们创建一个继承自BoundColumn类的LimitColumn类。BoundColumn类继承自DataGridColumn类,用来显示数据源中的字段内容。LimitColumn控件将会用到BoundColumn类中的FormatDataValue方法,此方法用来指定显示字段内容的格式。
然后设置自定义字数属性CharLimit,具体代码如下:

public class LimitColumn : BoundColumn
      
{
            
private int m_CharLimit = -1;
            
public int CharLimit
            
{
                  
get
                  
{
                        
return this.m_CharLimit;
                  }

                  
set
                  
{
                        
if(value>=0)
                        
{
                              
this.m_CharLimit = value;
                        }

                        
else
                        
{
                              
this.m_CharLimit = -1;
                        }

                  }

            }


            
protected override string FormatDataValue(object dataValue)
            
{
                  
if(this.m_CharLimit == -1)
                  
{
                        
return base.FormatDataValue (dataValue);
                  }

                  
else
                  
{
                        
string defValue = base.FormatDataValue (dataValue);
                        
if(defValue.Length < this.m_CharLimit)
                        
{
                              
return defValue;
                        }

                        
else
                        
{
                              
return defValue.Substring(0,this.m_CharLimit)+"";
                        }

                  }

            }



在页面上设置:

<Columns>
                              
<custcols:LimitColumn CharLimit="2" DataField="ShipCountry"></custcols:LimitColumn>
                        
</Columns>

效果如下:
 

通过这两个简单的例子,相信大家对自定义列控件有了大概的认识了。在以后的文章中,我们将看到更为复杂的自定义列控件的介绍。