扩展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中】
<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>
是不是和代码很简略啊。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)