Usuário com melhor resposta
Fone no GridView mascara 10 ou 11 digitos

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
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
-
Á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
Todas as Respostas
-
-
-
-
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
-
Á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
-
Á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