为DataGrid创建自定义列控件(一)

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类,代码如下:

None.gif using  System;
None.gif
using  System.Web;
None.gif
using  System.Web.UI;
None.gif
using  System.Web.UI.WebControls;
None.gif
None.gif
namespace  SimpleColumn
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif      
/**//// <summary>
InBlock.gif      
/// Class1 的摘要说明。
ExpandedSubBlockEnd.gif      
/// </summary>

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

ExpandedSubBlockEnd.gif            }

InBlock.gif
ExpandedSubBlockEnd.gif      }

ExpandedBlockEnd.gif}

None.gif


最后在页面上引用这各类

ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif @ Register TagPrefix="custCols" Namespace="SimpleColumn" Assembly="SimpleColumn"  %>

在DataGrid中添加Column,如下:

None.gif < Columns >
None.gif      
< custcols:HelloColumn ></ custcols:HelloColumn >
None.gif
</ Columns >

 

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

None.gif public   class  LimitColumn : BoundColumn
ExpandedBlockStart.gifContractedBlock.gif      
dot.gif {
InBlock.gif            
private int m_CharLimit = -1;
InBlock.gif            
public int CharLimit
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                  
get
ExpandedSubBlockStart.gifContractedSubBlock.gif                  
dot.gif{
InBlock.gif                        
return this.m_CharLimit;
ExpandedSubBlockEnd.gif                  }

InBlock.gif                  
set
ExpandedSubBlockStart.gifContractedSubBlock.gif                  
dot.gif{
InBlock.gif                        
if(value>=0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                              
this.m_CharLimit = value;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                              
this.m_CharLimit = -1;
ExpandedSubBlockEnd.gif                        }

ExpandedSubBlockEnd.gif                  }

ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
protected override string FormatDataValue(object dataValue)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                  
if(this.m_CharLimit == -1)
ExpandedSubBlockStart.gifContractedSubBlock.gif                  
dot.gif{
InBlock.gif                        
return base.FormatDataValue (dataValue);
ExpandedSubBlockEnd.gif                  }

InBlock.gif                  
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                  
dot.gif{
InBlock.gif                        
string defValue = base.FormatDataValue (dataValue);
InBlock.gif                        
if(defValue.Length < this.m_CharLimit)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                              
return defValue;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                              
return defValue.Substring(0,this.m_CharLimit)+"dot.gif";
ExpandedSubBlockEnd.gif                        }

ExpandedSubBlockEnd.gif                  }

ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif


在页面上设置:

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

 

效果如下:pic2.JPG
 

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

 

转载于:https://www.cnblogs.com/jierry/archive/2005/10/28/263736.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值