Tengo una muy simple ASP.Net la página que actúa como un front-end para un procedimiento almacenado. Que sólo se ejecuta en el procedimiento y se muestra el resultado de usar un control gridview: menos de 40 líneas de total código, incluyendo aspx marcado. El mismo procedimiento almacenado es muy… volátil. Se utiliza para una serie de propósitos y el formato de salida cambia con regularidad.

Toda la cosa funciona muy bien, debido a que el control gridview no necesita realmente a la atención de lo columnas el procedimiento almacenado devuelve: sólo se muestra en la página, que es exactamente lo que quiero.

Sin embargo, la base de datos esto va en contra tiene un número de columnas datetime todo el lugar donde la porción de tiempo no es realmente importante – siempre ceros. Lo que me gustaría ser capaz de hacer es controlar el formato de sólo las columnas datetime en el gridview, sin saber precisamente que las columnas de los que serán. En cualquier momento que una columna en el resultado tiene un tipo datetime, sólo hay que aplicar una determinada cadena de formato que se recorte el componente de tiempo.

Sé que podría convertir a un varchar en la base de datos, pero yo realmente no quiero tener que hacer los desarrolladores de atención sobre el formato de la consulta y esto pertenece al nivel de presentación, de todos modos. Cualquier otra idea?


Finalmente conseguí este trabajo de una manera aceptable (o al menos mejor) manera de utilizar este código:

Protected Sub OnRowDatabound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim d As DateTime
        For Each cell As TableCell In e.Row.Cells
            If Date.TryParse(cell.Text, d) AndAlso d.TimeOfDay.Ticks = 0 Then
                cell.Text = d.ToShortDateString()
            End If
        Next cell
    End If
End Sub

3 Comentarios

  1. 2

    Si son auto generación de las columnas que parece que son. El procedimiento para el uso de las redes formato es horrible.

    Que usted necesita para recorrer todas las columnas de la cuadrícula, probablemente en el enlace de datos de eventos y aplicar un formato de expresión a cualquier columna que se encuentra es una columna de fecha.

    Si no automático de la generación y son hadcoding columnas en la cuadrícula también se sabe alreayd que las columnas son las columnas de fecha y se puede aplicar el mismo formato de expresión a esa columna. Es algo como {0:ddmmaaaa} pero usted tendrá que buscar, por lo que probablemente no es del todo correcto.

    así que, resumiendo gancho en el enlace de datos de eventos. bucle a través de la columna de la colección y determinar si la columna es una columna de fecha. Me pregunto cómo se podría hacer esto :). Si usted decide que una columna es una columna de fecha establecer su formato de expresión.

    Voila

    ———————- EDITAR

    Aceptar acerca de cómo escribir el método que devuelve los datos desde el proceso para devolver un objeto datatable. Puede enlazar la tabla de datos a la cuadrícula después de formatear los datos en la tabla de datos. La tabla de datos.De la colección de columnas es una colección de DataColumns y estos tienen un Tipo de datos de la propiedad. Usted puede estar buscando para el Sistema.DateTime DateTime o y puede ser una de las propiedades de la propiedad Tipo de datos sí:)). Sé que es engorroso, pero lo que están pidiendo es, sin duda va a ser engorroso. Una vez que haya identificado las columnas de fecha usted puede ser capaz de hacer algo con él.

    Si no me gustaría empezar a buscar a los lectores de datos y ver si hay algo que puede hacer o con adaptadores de datos. Me gustaría poder dar una respuesta apropiada, pero sin embargo creo que te las arreglas para hacerlo, no va a ser bonito. Lo siento

    • Esto se ve, sobre la derecha: voy a esperar un poco más antes de upvoting o aceptar de modo que la pregunta permanece sin respuesta la ficha un poco más de tiempo, pero voy a volver a usted.
    • Bueno, yo he jugado con algunos ahora. Buen esfuerzo, pero no puedo encontrar una manera para obtener el tipo de una columna en el control en tiempo de ejecución, y, si pudiera, no puedo encontrar donde poner una expresión de formato.
    • Hizo una edición de otra idea que me acaba de hacer :). GL.
  2. 2

    si el uso explícito de las columnas enlazadas es una opción, agregar un DataFormatString a su boundField

    <asp:BoundField DataField="Whatever" ... DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="False"/ > 

    de lo contrario se podría mirar de hacer el formateo de la GridView.OnRowDataBound evento

Dejar respuesta

Please enter your comment!
Please enter your name here