我看到另一个帖子有点像我的问题:
ASP.NET GridView Column - formatting telephone number
但我不知道它是否回答了我的问题,因为他正在使用代码隐藏来制作列。我所做的就是在visual studio中插入GridView控件。顺便说一句,数据正在网格中填充,我现在只是试图获取格式设置。
我正在使用Microsoft Visual Studio Professional 2010.(对于我的数据库也使用SQL Management Studio,但可能不需要此信息,只是试图提供足够的信息以确保我正在做的事情被理解)
我正在使用Visual Basic.net代码在ASP.NET中创建一个网站。
该网站基本上是一个联系人列表网站。
3个文本框字段。名字,姓氏,主要电话#。
添加记录按钮(从文本框中获取信息并插入数据库)
GridView,显示正在填充信息的数据库
我有一个“主要电话号码”列,这会在GridView中显示一个电话号码。这个数字只有10位数,没有格式化......(即999-999-9999)
我想让GridView取9999999999并制作它(999)999-9999
如果我查看DataFormatString,我尝试了许多“{0:(###)### - ####}”的组合,包含和不包含引号,还包括全零而不是井号。< / p>
通过我的研究,似乎如果我想使用DataFormatString,我需要在我的数据库中将我的电话号码设为int。所以我删除了我的表并将其从varchar重新创建为int。我通过单击Gridview任务(GridView右上角的箭头)到达DataFormatString ...然后“编辑列”...然后在“选定的字段”下单击列的名称...“主电话号码”然后在“CommandField属性”下,我向下滚动到“DataFormatString”。
我希望我不是太详细。我非常感谢所有的帮助。
我发现了这个:
http://www.tek-tips.com/viewthread.cfm?qid=328173
但我不知道我将如何使用它..看看如何因为我的代码是由Visual Studio完成的......其中一些看起来像这样
更新:我最初发布了错误的代码,无论是哪种方式,基于我所说的Kelsey能够为我建议一个有效的答案。
以下是我的新代码以及凯利给出的更正。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="EmpId" DataSourceID="SqlDataSource1"
EmptyDataText="There are no data records to display." CellPadding="4"
ForeColor="#333333" GridLines="None" Height="136px" Width="299px"
AllowSorting="True">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:BoundField DataField="EmpId" HeaderText="EmpId" ReadOnly="True"
SortExpression="EmpId" Visible="False" />
<asp:BoundField DataField="FirstName" HeaderText="First Name"
SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="Last Name"
SortExpression="LastName" />
<%-- <asp:BoundField DataField="MainPhoneNumber" HeaderText="Main Phone Number"
SortExpression="MainPhoneNumber" />--%>
<asp:TemplateField HeaderText="Main Phone Number">
<ItemTemplate>
<asp:Literal ID="litPhone" runat="server" Text='<%# string.Format("{0:(###) ###-####}", Int64.Parse(Eval("MainPhoneNumber").ToString())) %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<SortedAscendingCellStyle BackColor="#FDF5AC" />
<SortedAscendingHeaderStyle BackColor="#4D0000" />
<SortedDescendingCellStyle BackColor="#FCF6C0" />
<SortedDescendingHeaderStyle BackColor="#820000" />
</asp:GridView>
答案 0 :(得分:7)
由于您未发布GridView
代码,因此我必须假设您的专栏使用BoundField
这样或类似的代码:
<Columns>
<asp:BoundField DataField="MainPhoneNumber" DataFormatString="{0:(###) ###-####}" />
由于它是字符串,因此您无法使用DataFormatString
属性,因此您需要将BoundField
更改为TemplateField
。只需将BoundField
替换为以下TemplateField
即可,它应该有效:
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="litPhone" runat="server" Text='<%# string.Format("{0:(###) ###-####}", Int64.Parse(Eval("MainPhoneNumber").ToString())) %>' />
</ItemTemplate>
</asp:TemplateField>
这里的关键是评估数据绑定字段并将其转换为Int64
的代码,以便字符串格式化器工作。请注意,我使用的是Int64
,而不仅仅是int
是32位,因为10位数字不适合。
我测试了它并且它有效:)
答案 1 :(得分:0)
在动态列上 - 不那么容易...... 我使用udf。
跟踪数据源(MS SQL)/*
print dbo.formatPhone('1234567');
print dbo.formatPhone('1234567890');
print dbo.formatphone('(314)522-4949');
print dbo.formatPhone('(314) 522-4949 x 104');
*/
create Function [udf_FormatPhone]
(
@rawPhone as varChar(50) = null
) Returns VarChar(50)
As
begin
Declare @formatPhone varChar(50);
Declare @len int;
set @rawPhone = replace(@rawPhone,'(','');
set @rawPhone = replace(@rawPhone,')','');
set @rawPhone = replace(@rawPhone,'-','');
set @rawPhone = replace(@rawPhone,' ','');
set @len=len(@rawPhone)
set @formatPhone =Case
when @len < 7 then @rawPhone
when @len =7 then Substring(@RawPhone,1,3) + '-' + substring(@RawPhone,4,4)
when @len =10 then substring(@RawPhone,1,3) + '-' + substring(@RawPhone,4,3) + '-' + substring(@RawPhone,7,4)
when @len > 10 then substring(@rawPhone,1,3) + '-' + substring(@rawPhone,4,3) + '-' + substring(@RawPhone,7,4) + ' ' + substring(@rawPhone,11,50)
else @RawPhone
end
return(@formatPhone);
end
和&#34; 3015551212x234&#34;
的结果