当前位置:首页>网络学院>程序开发>ASP.NET教程>文章内容

GridView 中格式化整理

[ 来源:www.it55.com | 作者: | 时间:2007-07-15 | 收藏 | 推荐 ] 【

今天又碰到有网友问GridView 中的格式化问题了,还是在这里记下吧: www.it55.com

设置 DataFormatString 后为什么格式化输出无效?
不要忽略两个重要属性 BoundField的 HtmlEncode 和 ApplyFormatInEditMode :
www.it55.com


HtmlEncode

it55.com

GridView 使用的 BoundField 与 DataGrid 使用 BoundColumn 不同,BounField 提供了一个 HtmlEncode 属性,提供是否对数据进行HTML编码,降低了 BoundColumn 潜在的Html &Script 嵌入攻击,默认该值是启用的。如果要使用格式化输出,应该关闭此属性。 www.it55.com在线教程

PS:不明白,BoundField内部如何实现的,为什么不能支持先格式化后再Html编码?有时间dasm一下,看下BoundField源码。
复制ASPX代码保存代码<asp:BoundField DataField="HireDate" DataFormatString="{0:yyyy年M月d日}" HtmlEncode="false" HeaderText="HireDate" /><asp:BoundField DataField="HireDate" DataFormatString="{0:yyyy年M月d日}" HtmlEncode="false" HeaderText="HireDate" /> IT资讯之家 www.it55.com

ApplyFormatInEditMode

IT资讯之家 www.it55.com

默认情况下,只有当数据绑定控件处于只读模式时,格式化字符串才能应用到字段值。当数据绑定控件处于编辑模式时,若要将格式化字符串应用到显示的值,应该同时将 ApplyFormatInEditMode 属性设置为 true。
复制ASPX代码保存代码<asp:BoundField DataField="HireDate" DataFormatString="{0:yyyy年M月d日}" HtmlEncode="false" HeaderText="HireDate" ApplyFormatInEditMode="true" /><asp:BoundField DataField="HireDate" DataFormatString="{0:yyyy年M月d日}" HtmlEncode="false" HeaderText="HireDate" ApplyFormatInEditMode="true" /> sflj www.it55.com kg^&fgd

格式化字符串的格式

IT资讯之家 www.it55.com

格式化字符串可以为任意字符串,并且通常包含字段值的占位符。例如,在格式化字符串“Item Value: {0}”中,当 BoundField 对象中显示字符串时,字段的值会代替 {0} 占位符。格式化字符串的剩余部分显示为文本。 免费资源www.it55.com

注意:如果格式化字符串不包含占位符,则来自数据源的字段值将不包含在最终显示文本中。

www.it55.com在线教程

占位符由用冒号分隔的两部分组成并用大括号括起,格式为 {A : Bxx}。冒号前的值(常规示例中为 A)指定在从零开始的参数列表中的字段值的索引。

http://www.it55.com/

注意:此参数是格式化语法的一部分。因为每个单元格中只有一个字段值,所以这个值只能设置为 0。即始终为{0:Bxx}

www.it55.com

该冒号以及冒号后面的值是可选的。冒号后的字符(常规示例中为 B)指定值的显示格式。下表列出了一些常用格式。

45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

C 以货币格式显示数值。
D 以十进制格式显示数值。
E 以科学记数法(指数)格式显示数值。
F 以固定格式显示数值。
G 以常规格式显示数值。
N 以数字格式显示数值。
X 以十六进制格式显示数值。 免费资源www.it55.com

格式字符后的值(常规示例中为 xx)指定显示的值的有效位数或小数位数。例如,格式化字符串“{0:F2}”将显示带两位小数的定点数。 vd;k;l www.it55.com rdfg

更多的格式化信息:格式化概述 http://msdn2.microsoft.com/zh-cn/library/26etazsy(VS.80).aspx

it55.com


以下连接提供了不同的格式化类型: http://www.it55.com/

数字格式字符串
http://msdn2.microsoft.com/zh-cn/library/427bttx3(VS.80).aspx
日期与时间格式字符串
http://msdn2.microsoft.com/zh-cn/library/97x6twsz(VS.80).aspx
枚举格式字符串
http://msdn2.microsoft.com/zh-cn/library/c3s1ez6e(VS.80).aspx
自定义格式字符串
http://msdn2.microsoft.com/zh-cn/library/0asazeez(VS.80).aspx
复合格式化
http://msdn2.microsoft.com/zh-cn/library/txafckwd(VS.80).aspx 免费资源www.it55.com

HyperLinkField www.it55.com

特别说明HyperLinkField,是因为实现了DataGrid的HyperLinkColumnd所不支持的,多参数格式化链接。通常我们附加在url后面的QueryString不会只有一个,asp.net 1。x 中只有使用绑定列,然后手动写代码:
复制ASPX代码保存代码<asp:DataGrid id="DataGrid1" runat="server" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:HyperLink runat="server" Text="View Photo" NavigateUrl='<%# String.Format("photo.aspx?empid={0}&path={1}", Eval("EmployeeID"), Eval("PhotoPath")) %>'></asp:HyperLink>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid><asp:DataGrid id="DataGrid1" runat="server" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:HyperLink runat="server" Text="View Photo" NavigateUrl='<%# String.Format("photo.aspx?empid={0}&path={1}", Eval("EmployeeID"), Eval("PhotoPath")) %>'></asp:HyperLink>

免费资源www.it55.com


</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
现在使用HyperLinkField,看下,省去很多苦力活:)
复制ASPX代码保存代码<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="SqlDataSource1">
<Columns>
<asp:HyperLinkField DataNavigateUrlFields="EmployeeID,City" DataNavigateUrlFormatString="photo.aspx?empid={0}&path={1}"
HeaderText="PhotoPath" Text="View Photo" />
</Columns>
</asp:GridView><asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]

图片文章