none
Fone no GridView mascara 10 ou 11 digitos RRS feed

  • Pergunta

  • Uso VS2013

    estou tentando exibir um telefone que pode ser de 8 ou 9 dígitos, quando era só 10 fazia assim:

    -----------------

    <asp:TemplateField HeaderText="TELEFONE" HeaderStyle-HorizontalAlign="Left">

    <ItemTemplate>

    <asp:Label ID="lbltelefone" runat="server" Text='<%# Eval("Telefone") == null || Eval("Telefone") == System.DBNull.Value ? "" : Convert.ToDouble(Eval("Telefone")).ToString(@"\(00\)0000\-0000")%>'></asp:Label><br />

    </ItemTemplate>

    </asp:TemplateField>

    -------------------

    Mas agora pode vir com 11? Tenho que saber quantos dígitos vem pra montar a máscara


    Álvaro Luiz



    • Editado Álvaro Luiz segunda-feira, 31 de agosto de 2015 12:20
    segunda-feira, 31 de agosto de 2015 11:25

Respostas

  • Álvaro,

    <asp:TemplateField HeaderText="Telefone">
    <ItemTemplate>
    <asp:Label ID="lblTelefone" runat="server"></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>


    No método RowDataBound, do grid, faça o seguinte:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          DataRowView rv = (DataRowView)e.Row.DataItem;
          var lblTelefone = e.Row.FindControl("lblTelefone") as Label;
          lblTelefone.Text = Regex.Replace(rv["Telefone"].ToString(), @"^\(?(\d{2})\)?[\s\-]?(\d{4,5})\-?(\d{4})$", "($1) $2-$3");
       }
    }

    Não precisará do IF para verificar o tamanho da string, pois a expressão regular irá formatar de acordo com a regra.

    • Marcado como Resposta Álvaro Luiz terça-feira, 1 de setembro de 2015 17:18
    terça-feira, 1 de setembro de 2015 12:59
  • Álvaro, 

    Vi que sua formatação tem os cinco dígitos no final do número, então modifique o Regex, conforme indicado abaixo:

    De: lblTelefone.Text = Regex.Replace(rv["Telefone"].ToString(), @"^\(?(\d{2})\)?[\s\-]?(\d{4,5})\-?(\d{4})$", "($1) $2-$3");

    Para:  lblTelefone.Text = Regex.Replace(rv["Telefone"].ToString(), @"^\(?(\d{2})\)?[\s\-]?(\d{4})\-?(\d{4,5})$", "($1) $2-$3");

    Abs,

    • Marcado como Resposta Álvaro Luiz terça-feira, 1 de setembro de 2015 17:18
    terça-feira, 1 de setembro de 2015 13:04

Todas as Respostas

  • Álvaro, 

    Poderia utilizar Expressão Regular para a formatação, definindo a regra da quantidade de dígitos.

    http://www.dothcom.net/blog/programacao/expressao-regular-para-telefones-fixos-e-celulares-do-brasil/

    segunda-feira, 31 de agosto de 2015 12:59
  • pode ser Renildo... mas preciso saber como colocar um if dentro da comparação pra saber se vem 10 ou 11 dígitos

    mesmo assim obrigado


    Álvaro Luiz

    segunda-feira, 31 de agosto de 2015 13:05
  • Álvaro,

    Não precisa do if, basta passar o número para a expressão regular, independente de ser 10 ou 11, a regra saberá definir isso.

    segunda-feira, 31 de agosto de 2015 13:59
  • estou tentando fazer assim mas falta alguma coisa:

    <asp:Label ID="lblCelular" runat="server" Text='<%# (Eval("Telefone") != null || Eval("Telefone") == System.DBNull.Value ? "" : ((Eval("Telefone").ToString().Length=10) ? Convert.ToDouble(Eval("Telefone")).ToString(@"\(00\)0000\-0000")) : ((Eval("Telefone").ToString().Length=11) ? Convert.ToDouble(Eval("Telefone")).ToString(@"\(00\)0000\-00000"))%>'></asp:Label>


    Álvaro Luiz

    segunda-feira, 31 de agosto de 2015 14:03
  • Álvaro,

    <asp:TemplateField HeaderText="Telefone">
    <ItemTemplate>
    <asp:Label ID="lblTelefone" runat="server"></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>


    No método RowDataBound, do grid, faça o seguinte:

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          DataRowView rv = (DataRowView)e.Row.DataItem;
          var lblTelefone = e.Row.FindControl("lblTelefone") as Label;
          lblTelefone.Text = Regex.Replace(rv["Telefone"].ToString(), @"^\(?(\d{2})\)?[\s\-]?(\d{4,5})\-?(\d{4})$", "($1) $2-$3");
       }
    }

    Não precisará do IF para verificar o tamanho da string, pois a expressão regular irá formatar de acordo com a regra.

    • Marcado como Resposta Álvaro Luiz terça-feira, 1 de setembro de 2015 17:18
    terça-feira, 1 de setembro de 2015 12:59
  • Álvaro, 

    Vi que sua formatação tem os cinco dígitos no final do número, então modifique o Regex, conforme indicado abaixo:

    De: lblTelefone.Text = Regex.Replace(rv["Telefone"].ToString(), @"^\(?(\d{2})\)?[\s\-]?(\d{4,5})\-?(\d{4})$", "($1) $2-$3");

    Para:  lblTelefone.Text = Regex.Replace(rv["Telefone"].ToString(), @"^\(?(\d{2})\)?[\s\-]?(\d{4})\-?(\d{4,5})$", "($1) $2-$3");

    Abs,

    • Marcado como Resposta Álvaro Luiz terça-feira, 1 de setembro de 2015 17:18
    terça-feira, 1 de setembro de 2015 13:04