扩展DataGrid 荣

在ASP.NET编程中,经常会用到DataGrid(或GridView)。
其实,用的时候,这个DataGrid与那个DataGrid,很多功能都几乎是相同的。
例如,分页,排序。例如:一般情况下,Int列应该居中显示,字符串列应该靠左排序,
double等应该靠右排序,且应该取到小数点后两位,时间格式应该居中,且应该按一定格式显示,例如“YYYY-MM-DD”;如果某列允许排序,则该列的排序字段一般与DataFeild相同。
其实,我们可以扩展一下BoundColumn,让BoundColumn根据DataFeild的不同而显示不同的默认属性。
设计:

1:扩展BoundColumn类:
 public class XMRBoundColumn : BoundColumn

2:在类中设置表示DataFeild数据类型的属性DataType。

3:重写Initialize(),在Initialize()中,设置列的默认属性:
  1)如果是整型,则:
if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                    }

                    if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                    }


2)如果是小数:
if (this.DataFormatString == string.Empty || this.DataFormatString.Equals(""))
                    {
                        this.DataFormatString = "{0:N2}";
                    }

                    if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.ItemStyle.HorizontalAlign = HorizontalAlign.Right;
                    }

                    if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.HeaderStyle.HorizontalAlign = HorizontalAlign.Right;
                    }
3)如果是日期:
if (this.DataFormatString == string.Empty || this.DataFormatString.Equals(""))
                    {
                        this.DataFormatString = "{0:yyyy-MM-dd}";
                    }

                    if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
                    }

                    if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
                    }
4)其他:
if (this.ItemStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.ItemStyle.HorizontalAlign = HorizontalAlign.Left;
                    }

                    if (this.HeaderStyle.HorizontalAlign == HorizontalAlign.NotSet)
                    {
                        this.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
                    }

4:在Initialize()中,设置列的排序字段:
if (this.SortExpression == null || this.SortExpression == "")
            {
                this.SortExpression = this.DataField;
            }

现在,把DataGrid中的BoundColumn,替换为XMRBoundColumn,则可是少写很多代码了。

当然,DataGrid也可以扩展,我们可以扩展一个DataGridEx:
public class DataGridEx : DataGrid

至于DataGridEx怎么扩展,本节就不多讲,也无非是添加默认的翻页,排序事件,设置每一列的数据类型等。

扩展后的代码如下:
皮肤代码:【Default.skin中】


<%@ Register Assembly="DOTNET.Common" Namespace="DOTNET.Web" TagPrefix="cc1" %>
<cc1:DataGridEx SkinID="dgdListEx" BorderWidth="1px" PageSize="15" Width="98%" BorderColor="#0083B9" HorizontalAlign="Center" BorderStyle="Ridge"
CssClass
="tableGrid" AutoGenerateColumns="False" runat="server" AllowSorting="True" AllowPaging="True"
GridLines
="Horizontal" SelectedItemStyle-Wrap="false" SelectedItemStyle-CssClass="gridSelectedItem" 
EditItemStyle-CssClass
="gridEditItem" EditItemStyle-Wrap="false" 
AlternatingItemStyle-CssClass
="gridAltItem" AlternatingItemStyle-Wrap="false" 
ItemStyle-CssClass
="gridItem" ItemStyle-Wrap="false"
HeaderStyle-CssClass
="gridHeader" HeaderStyle-Wrap="false" 
FooterStyle-CssClass
="gridFooter" FooterStyle-Wrap="false" 
PagerStyle-VerticalAlign
="middle" PagerStyle-NextPageText="下一页" 
PagerStyle-PrevPageText
="上一页" PagerStyle-HorizontalAlign="Left" />


页面代码:

        
<cc1:DataGridEx ID="dgdList" SkinID="dgdListEx" runat="server">         
 <Columns>    
   
<cc1:XMRBoundColumn DataField="ClassName" HeaderTex="ClassName" />
                
<asp:BoundColumn DataField="StudentGUID" Visible="False" />
                
<cc1:XMRBoundColumn DataField="StudentName" HeaderText="StudentName" />
                
<asp:BoundColumn DataField="ClassGUID" Visible="False" />
 </Columns>
        </cc1:DataGridEx>

是不是和代码很简略啊。
原文地址:https://www.cnblogs.com/admin11/p/1258613.html