Pergunta

Como posso formatar dados provenientes de uma declaração DataBinder.Eval em uma página ASPX?

Por exemplo, eu quero mostrar a data de publicação das notícias em um formato específico na página principal. Eu estou usando o controle ASP.NET 2.0 Repeater para mostrar a lista de itens de notícias.

O código para esta vai como esta:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
<HeaderTemplate><table cellpadding="0" cellspacing="0" width="255"></HeaderTemplate>
<ItemTemplate>
    <tr><td >
            <a href='/content/latestNews.aspx?id=<%#DataBinder.Eval(Container.DataItem, "id") %>'>
                <asp:Label ID="lblNewsTitle" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "title") %>'></asp:Label>
            </a>
    </td></tr>
    <tr><td>
           <asp:Label ID="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate"))%>'></asp:Label>
    </td></tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate></asp:Repeater>

Existe uma maneira que eu poderia chamar um método personalizado com o valor DataBinder.Eval como parâmetro (algo como abaixo)?

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>

Se sim, então onde posso escrever o método GetDateInHomepageFormat? Tentei no código por trás de página, mas tenho um erro de tempo de execução? Se isso não for possível, existe uma maneira de fazer em linha formatação?

Foi útil?

Solução

Há uma sobrecarga opcional para DataBinder.Eval para fornecer formatação:

<%# DataBinder.Eval(Container.DataItem, "expression"[, "format"]) %>

O parâmetro formato é um valor String, utilizando o valor de sintaxe de substituição de espaço reservado (chamado de formatação composto) assim:

<asp:Label id="lblNewsDate" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "publishedDate", "{0:dddd d MMMM}") %>'</label>

Outras dicas

Depois de algumas pesquisas na internet, descobri que é na verdade muito possível para chamar um método personalizado passando o valor DataBinder.Eval.

O método personalizado pode ser escrito no código por trás do arquivo, mas tem que ser declarado public ou protegido . Na minha pergunta acima, eu tinha mencionado que eu tentei escrever o método personalizado no código por trás, mas estava ficando um erro de tempo de execução. A razão para isso era que eu havia declarado o método a ser privada .

Assim, em resumo a seguir é uma boa maneira de usar o valor DataBinder.Eval para obter a sua saída desejada:

default.aspx

<asp:Label ID="lblNewsDate" runat="server" Text='<%# GetDateInHomepageFormat(DataBinder.Eval(Container.DataItem, "publishedDate")) )%>'></asp:Label>

código Default.aspx.cs:

public partial class _Default : System.Web.UI.Page
{

    protected string GetDateInHomepageFormat(DateTime d)
    {

        string retValue = "";

        // Do all processing required and return value

        return retValue;
    }
}

Espero que isso ajude os outros também.

Por que não usar a sintaxe mais simples?

<asp:Label id="lblNewsDate" runat="server" Text='<%# Eval("publishedDate", "{0:dddd d MMMM}") %>'</label>

Este é o controle template "Eval" que leva na expressão eo formato de string:

protected internal string Eval(
string expression,
string format

)

http://msdn.microsoft.com/en-us/library/ 3d2sz789.aspx

Você pode usar uma função em um repetidor como você disse, mas aviso que o DataBinder.Eval retorna um objeto e você tem que convertê-lo para um DateTime.

Você também pode formatar o seu linha de campo:

<%# ((DateTime)DataBinder.Eval(Container.DataItem,"publishedDate")).ToString("yyyy-MMM-dd") %>

Se você usar ASP.NET 2.0 ou mais recente, você pode escrever isso como abaixo:

<%# ((DateTime)Eval("publishedDate")).ToString("yyyy-MMM-dd") %>

Outra opção é ligar o valor de etiqueta no evento OnItemDataBound.

Esta linha resolveu o meu problema:

<%#DateTime.Parse(Eval("DDDate").ToString()).ToString("dd-MM-yyyy")%>

Para formatar a data usando o uso formato de data local:

<%#((DateTime)Eval("ExpDate")).ToString("d")%>

Como formatar uma declaração Eval para exibir uma data usando Data Locale

Obrigado a todos. Eu tinha sido preso em cadeias de formato padrão para algum tempo. Eu também usei uma função personalizada em VB.

Mark Up: -

<asp:Label ID="Label3" runat="server" text='<%# Formatlabel(DataBinder.Eval(Container.DataItem, "psWages1D")) %>'/>

código por trás: -

Public Function fLabel(ByVal tval) As String
   fLabel = tval.ToString("#,##0.00%;(#,##0.00%);Zero")
End Function

Text = '<% # DateTime.Parse (Eval ( "LastLoginDate") ToString ().) ToString ( "dd / mm / aaaa hh: mm tt").%>'

Isso funciona para o formato que você quiser

<asp:Label ID="ServiceBeginDate" runat="server" Text='<%# (DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:yyyy}") == "0001") ? "" : DataBinder.Eval(Container.DataItem, "ServiceBeginDate", "{0:MM/dd/yyyy}") %>'>
</asp:Label>

Você pode usá-lo desta forma, em página aspx

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top