Форматировать номер телефона в GridView - PullRequest
1 голос
/ 07 августа 2010

Я вижу другую ветку, похожую на мой вопрос:

Колонка ASP.NET GridView - форматирование номера телефона

но я не знаю, отвечает ли он на мой вопрос, так как он использует код для создания столбца. Все, что я сделал, это вставил элемент управления GridView в visual studio. Кстати, данные заполняются в Grid, я просто пытаюсь установить форматирование сейчас.

Я использую Microsoft Visual Studio Professional 2010. (Также SQL Management Studio для моей базы данных, но эта информация может не понадобиться, просто пытаюсь дать достаточно, чтобы убедиться, что мои действия поняты)

Я делаю сайт в ASP.NET с кодом Visual Basic.net позади.

Сайт, по сути, является списком контактов.

3 поля текстового поля. Имя, Фамилия, Основной номер телефона.

Кнопка добавления записи (берет информацию из текстовых полей и вставляет в базу данных)

GridView, который показывает базу данных, которая заполняется информацией

У меня есть столбец «Основной номер телефона», и при этом извлекается номер телефона, который отображается в GridView. Номер состоит всего из 10 цифр, без форматирования ... (т. Е. 999-999-9999)

Я пытаюсь заставить GridView взять 9999999999 и сделать его (999) 999-9999

Если я посмотрю на DataFormatString, я попробовал много комбинаций "{0: (###) ### - ####}" с и без кавычек, а также со всеми нулями вместо знаков фунта.

В ходе моих исследований выяснилось, что если я хочу использовать DataFormatString, мне нужно сделать свой номер телефона в базе данных int. Поэтому я удалил свою таблицу и заново создал ее из varchar в int. Я попадаю в DataFormatString, нажимая на Задачи Gridview (стрелка в правом верхнем углу GridView) ... затем "Редактировать столбцы" ... затем в разделе "Выбранные поля" я нажимаю имя столбца ... "Основной номер телефона" затем в разделе «Свойства CommandField» прокрутите вниз до «DataFormatString».

Надеюсь, я не слишком подробен. Я действительно оценил всю помощь.

Я нашел это:

http://www.tek -tips.com / viewthread.cfm? QID = 328173

но я не знаю, как бы я использовал его ... видя как, потому что мой код был сделан Visual Studio ... некоторые из них выглядят так


ОБНОВЛЕНИЕ: Я отправил неправильный код первоначально, так или иначе, основываясь на том, что, как я сказал, Келси смогла предложить для меня ответ, который сработал.

Ниже приведен мой новый код с исправлениями, внесенными Келли.

    <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>

Ответы [ 3 ]

7 голосов
/ 07 августа 2010

Так как вы не опубликовали свой код 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-значное число не подходит.

Я проверил его, и он работает:)

0 голосов
/ 23 ноября 2015

Другой альтернативой является изменение оператора SELECT для приведения к числу (которое может содержать достаточно цифр), если вы уверены, что оно не содержит символов, не являющихся числами. В SQL Server это делается с помощью встроенных функций CAST или CONVERT:

SELECT CAST(Phone as BIGINT) as Phone

Тогда граничное поле с DataFormatString будет работать как положено:

DataFormatString="{0:(###) ###-####}"

Я обычно избегаю полей шаблона, потому что тогда я не могу установить

EnableSortingAndPagingCallbacks="True"

в сетке. Мне также нравится более тонкий код с ограниченного поля.

0 голосов
/ 26 октября 2014

На динамических столбцах - не так просто ... Я пошел за источником данных (MS SQL) с udf.

/*
    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

и результат «3015551212x234»

Correctly formatted

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...