ASP.NET网格视图数据字段列格式不起作用

时间:2017-09-27 19:11:38

标签: c# sql asp.net gridview

我对GridView列格式有问题。 我有一个PhoneNumber目前来自数据库(###)### - ##### 但我希望格式为############,没有间距和括号。我尝试了DataFormatString="{0:###-####}"之类的所有内容,或者将其转换为 TemplateField 并为其提供格式但不起作用。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
  <Columns>
    <asp:TemplateField HeaderText="Phone Number">
      <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server" Text='<%# 
            Bind("PhoneNumber") %>'></asp:TextBox>
      </EditItemTemplate>
      <ItemTemplate>
        <asp:Label ID="Label1" runat="server" 
            Text='<%# Bind("PhoneNumber", "{0:d}") %>'></asp:Label>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

这是在将列转换为 TemplateField

之前
 <asp:BoundField DataField="PhoneNumber" HeaderText="Phone Number Home" 
     SortExpression="Phone" DataFormatString="{0:######-####}" HtmlEncode="false" />

但没有任何效果。我仍然可以获得这样的电话号码格式(123) 123-4567

3 个答案:

答案 0 :(得分:1)

如果要动态绑定代码中的行,则应格式化gridview的DataBind事件中的列。

语义列格式化仅在语义上使用绑定数据时有效,例如声明

答案 1 :(得分:1)

尝试替换 TemplateField 中的Text属性:

Text='<%# Bind("PhoneNumber", "{0:d}") %>'

使用:

Text='<%# String.Format("{0:##########}", 
                  Convert.ToInt64(DataBinder.Eval(Container.DataItem, "PhoneNumber")))%>'

使用"#" Custom Specifier

答案 2 :(得分:0)

格式化只是加法的,而不是减法的。要实现此目的,您需要公开已删除非数字的值的版本,以便客户端格式化可以对其进行操作。