asp.net formatting repeater databinder

asp.net - Formateo de datos de DataBinder.Eval



formatting repeater (10)

Después de buscar en Internet, descubrí que , de hecho, es muy posible llamar a un método personalizado que pasa el valor de DataBinder.Eval.

El método personalizado se puede escribir en el código detrás del archivo, pero se debe declarar público o protegido . En mi pregunta anterior, mencioné que traté de escribir el método personalizado en el código subyacente, pero estaba obteniendo un error de tiempo de ejecución. La razón de esto fue que había declarado que el método era privado .

Por lo tanto, en resumen, la siguiente es una buena forma de utilizar el valor de DataBinder.Eval para obtener el resultado deseado:

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 esto ayude a otros también.

¿Cómo puedo formatear datos procedentes de una declaración DataBinder.Eval en una página ASPX?

Por ejemplo, quiero mostrar la fecha de publicación de las noticias en un formato particular en la página de inicio. Estoy usando el control ASP.NET 2.0 Repeater para mostrar la lista de noticias.

El código para esto es así:

<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 alguna manera de llamar a un método personalizado con el valor DataBinder.Eval como su parámetro (algo como a continuación)?

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

En caso afirmativo, ¿dónde escribo el método GetDateInHomepageFormat? Probé en el código detrás de la página, pero obtuve un error de tiempo de ejecución? Si esto no es posible, ¿hay alguna forma de hacer el formateo en línea?


¿Por qué no usar la sintaxis más simple?

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

Este es el control de plantilla "Eval" que toma en la expresión y el formato de cadena:

protected internal string Eval( string expression, string format

)

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


Puede usar una función en un repetidor como dijo, pero observe que DataBinder.Eval devuelve un objeto y debe convertirlo a DateTime.

También puede formatear su campo en línea:

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

Si usa ASP.NET 2.0 o posterior, puede escribir esto como se indica a continuación:

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

Otra opción es vincular el valor a la etiqueta en el evento OnItemDataBound.


Esta línea resolvió mi problema:

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


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


Hay una sobrecarga opcional para DataBinder.Eval para suministrar formato:

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

El parámetro de formato es un valor de cadena, que utiliza la sintaxis de reemplazo de marcador de posición de valor (denominado formato compuesto) como este:

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



Gracias a todos. Estuve atascado en cadenas de formato estándar durante algún tiempo. También utilicé una función personalizada en VB.

Margen:-

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

Código detrás:-

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


Puedes usarlo de esta manera en la página aspx

<%# DataBinder.Eval(Container.DataItem, "DateColoumnName", "{0:dd-MMM-yyyy}") %>


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

Esto funciona para el formato que quieras