• GridView Eval() 中数据格式化或格式化数据


    1、   为什么设置了DataFormatString没有效果?

    不要忽略BoundField的两个重要属性HtmlEncode和ApplyFormatInEditMode。

    HtmlEncode

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

    <asp:BoundField DataField="HireDate" DataFormatString="{0:yyyy年M月d日}" HtmlEncode="false" HeaderText="HireDate" />
    ApplyFormatInEditMode

    默认情况下,只有当数据绑定控件处于只读模式时,格式化字符串才能应用到字段值。当数据绑定控件处于编辑模式时,若要将格式化字符串应用到显示的值,应该同时将 ApplyFormatInEditMode 属性设置为 true。

    <asp:BoundField DataField="HireDate" DataFormatString="{0:yyyy年M月d日}" HtmlEncode="false" HeaderText="HireDate" ApplyFormatInEditMode="true" />

    2、   DataFormatString的格式

    格式化字符串可以为任意字符串,并且通常包含字段值的占位符。

    例如:DataFormatString="aaa{n:bbb}ccc" ,其中的aaa和ccc表示任意的字符串;n是从零开始的参数列表中的字段值的索引,因为每个单元格中只有一个字段值,所以n通常为0;bbb为格式字符串代表所们希望数据显示的格式。

    3、   GridView数据常用格式化类型

    数字 {0:N2} 12.36

    数字 {0:N0} 13

    数字 {0:D} 12345 12345

    数字 {0:D8} 12345 00012345

    数字 {0:F} 12345.6789 12345.68

    数字 {0:F0} 12345.6789 12346

    数字 {0:G} 12345.6789 12345.6789

    数字 {0:G7} 123456789 1.234568E8

    货币 {0:c2} $12.36

    货币 {0:c4} $12.3656

    货币 "¥{0:N2}" ¥12.36

    科学计数法 {0:E3} 1.23E+001

    百分数 {0:P} 12.25%

    日期 {0:D} 2006年11月25日

    日期 {0:d} 2006-11-25

    日期 {0:f} 2006年11月25日 10:30

    日期 {0:F} 2006年11月25日 10:30:00

    日期 {0:s} 2006-11-26 10:30:00

    时间 {0:T} 10:30:00

    时间 {0:t} 10:30

    HyperLinkField

    特别说明HyperLinkField,是因为实现了DataGrid的HyperLinkColumnd所不支持的,多参数格式化链接。通常我们附加在url后面的QueryString不会只有一个,asp.net 1。x 中只有使用绑定列,然后手动写代码:

    <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>
    现在使用HyperLinkField,看下,省去很多苦力活:)

    复制   保存

    <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>
    注意:

    1、.aspx中 DataNavigateUrlFields 中多个 Field 使用 , (逗号)分隔

    2、裕绑定的Url 实际值,不能为完整的绝对的路径(如:http://www.cnblogs.com/Jinglecat/archive/2007/05/20/753284.html),而应该提供相对路径(如:Jinglecat/archive/2007/05/20/753284.html),否则该URL整个不会被输出,应该是HyperLinkField内部做了HTML监测,但它又不提供开关属性如BoundField 的HtmlEncode给开发人员,应该算一个bug吧!

    空值(Null)处理

    如果字段的值为空,则可以通过设置 NullDisplayText 属性显示自定义标题。

    通过将 ConvertEmptyStringToNull 属性设置为 true,BoundField 对象,也可以将空字符串 ("") 字段值自动转换为空值。

    作者:沐雪
    文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者和博客园共有,如需转载恳请注明。
    如果您觉得阅读这篇博客让你有所收获,请点击右下方【推荐】
    找一找教程网-随时随地学软件编程 http://www.zyiz.net/

  • 相关阅读:
    【JZOJ100047】基因变异【BFS】
    【JZOJ100047】基因变异【BFS】
    【JZOJ100046】收集卡片【模拟】
    【JZOJ100046】收集卡片【模拟】
    【NOIP2018】【洛谷P5022】旅行【基环树】
    【NOIP2018】【洛谷P5022】旅行【基环树】
    【POJ3417】Network【LCA】【差分】
    【POJ3417】Network【LCA】【差分】
    初学编程,选C还是选C++,你选对了吗
    TIOBE9月编程语言排行榜:时隔五年,为什么C语言依然排行第一
  • 原文地址:https://www.cnblogs.com/puzi0315/p/2628984.html
Copyright © 2020-2023  润新知