Gridview中BoundField的DataFormatString如何看起来不会有前导零?
到目前为止,我得到了这个:
<asp:BoundField DataField="NUMBER" HeaderText="Id. number" DataFormatString="{0:d}">
预期结果:
000001 - &gt; 1
002101 - &gt; 2101
我试图用official documentation和this page来解决这个问题。到目前为止都没有成功。
答案 0 :(得分:2)
如果要在boundfield中正确格式化某些内容,我总是建议将其转换为模板字段。使用它比绑定场更容易。以下是模板字段转换后的外观示例。
<asp:TemplateField ShowHeader="False" Visible="False">
<EditItemTemplate>
<asp:TextBox ID="tbEditNumber" runat="server" Text='<%# Bind("Number","{0:n}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="tbNumber" runat="server" Text='<%# Bind("Number","{0:n}") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
在我放置的模板字段中..
Text ='&lt;%#Bind(“yourfield”,“{0:n}”)%&gt;'
这应该将其格式化为一个数字,并且应该删除前导零。
编辑:您可以尝试
Text ='&lt;%#String.Format(“{0:n}”,Eval(“Number”))%&gt;'
答案 1 :(得分:1)
另一种方法是使用String.Trim函数。以下代码是我完成您要完成的工作的方式:
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text="<%#Eval("NUMBER").ToString().TrimStart('0')%>" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
棘手的部分是使用引号和单引号的正确组合。你可以使用
"
代替您正在显示的数据字段列周围的引号字符。
答案 2 :(得分:0)
试试这个。这种方式更清洁。
标记
<asp:TemplateField HeaderText="Id. number">
<EditItemTemplate>
<asp:TextBox ID="tbEditNumber" runat="server" Text='<%# ConvertToDigit(Eval("Number")) %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="tbNumber" runat="server" Text='<%# ConvertToDigit(Eval("Number")) %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
代码隐藏
protected int ConvertToDigit(object oNum)
{
var i = 0;
if (oNum != null) int.TryParse(oNum.ToString(), out i);
return i;
}
答案 3 :(得分:0)
简化Kimmels答案,不需要放在服务器标签中,不需要关注单引号或双引号,不关心底层数据类型,因为它将对象转换为字符串,然后执行string.TrimStart,不需要代码隐藏
<asp:TemplateField HeaderText="Work Order">
<ItemTemplate>
<%# Eval("WorkOrder").ToString().TrimStart("0".ToCharArray()) %>
</ItemTemplate>
</asp:TemplateField>
0123456 = 123456
0012345 = 12345
如果需要服务器标签,只需用单引号
开始和结束文本标签<asp:Label ID="lblWorkOrder" runat="server" Text='<%# Eval("WorkOrder").ToString().TrimStart("0".ToCharArray()) %>' />