Frage

Ich habe eine sehr einfache ASP.Net-Seite, die für eine gespeicherte Prozedur als Frontend dient. Es läuft nur das Verfahren und zeigt den Ausgang einer Gridsteuerung mit: weniger als 40 Zeilen des gesamten Codes, einschließlich aspx Markup. Die gespeicherte Prozedur selbst ist sehr ... volatil. Es wird regelmäßig für eine Reihe von Zwecken und die Ausgabeformatänderungen verwendet.

Das Ganze funktioniert gut, weil die gridview Steuerung wirklich nicht kümmern müssen, welche Spalten der gespeicherten Prozedur zurück: Es zeigt sie nur auf der Seite, das ist genau das, was ich will

.

Allerdings hat die Datenbank dies läuft gegen eine Reihe von Datums-Werte alle über den Ort, wo der Zeitteil nicht wirklich WICHTIG- es ist immer auf Null gesetzt. Was ich möchte in der Lage sein zu tun, steuert die Formatierung nur die Datetime-Spalten in der Gridview, ohne jemals genau zu wissen, welche Spalten diejenigen sein werden. Jedes Mal, wenn eine Spalte in den Ergebnissen einen Datetime-Typen hat, gilt nur ein bestimmtes Format String, den die Zeitkomponente abschneiden wird.

Ich weiß, dass ich in der Datenbank in eine varchar konvertieren konnte, aber ich würde wirklich nicht will Entwickler haben kümmern sich um die Formatierung in der Abfrage zu machen, und dies gehört bei ohnehin der Präsentationsebene. Jede andere Ideen?


Schließlich bekam diese Arbeit in einem akzeptablen (oder zumindest verbessert) Art und Weise mit diesem Code:

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
War es hilfreich?

Lösung

Wenn Sie Auto, um die Spalten zu erzeugen, die es klingt wie Sie sind. Das Verfahren zur Verwendung der Grids Formatierung ist schrecklich.

Sie würden alle Spalten des Rasters, wahrscheinlich im Databound-Ereignis-Schleife müssen durch und gelten für jede Spalte, die Sie einen Formatierungs Ausdruck finden wird ein Datum Spalte.

Wenn Sie nicht automatisch Erzeugungs sind und Sie hadcoding Spalten in Ihrem Raster wissen Sie auch alreayd, welche Spalten sind Datumsspalten und Sie können das gleiche Format Ausdruck dieser Spalte gelten. Es ist so etwas wie {0: ttmmjjjj}., Aber sie wird es aussehen muss sich wie das ist wahrscheinlich nicht ganz richtig

so Haken in das Databound-Ereignis zusammenzufassen. Schleife durch die Säule Sammlung und festzustellen, wenn die Spalte eine Datumsspalte ist. Ich frage mich, wie Sie könnte diese :) tun. Wenn Sie eine Spalte entscheiden, ist eine Datumsspalte sein Format Ausdruck festgelegt.

Voila

---------------------- EDIT

Ok, wie über Sie Sie Methode schreiben, die die Daten aus der proc gibt eine Datentabelle zurückzukehren. Sie können die Datentabelle zu Ihrem Raster binden die Daten in der Datentabelle nach der Formatierung. Die datatable.Columns Kollektion ist ein colection von Datacolumns und diese haben eine Eigenschaft Datatype. Sie können für System.DateTime oder Datetime suchen und es kann eine der Eigenschaften der Datatype-Eigenschaft selbst :) sein. Ich weiß, es ist umständlich, aber was Sie fordern ist auf jeden Fall umständlich sein würde. Sobald Sie Datumsspalten identifiziert haben können Sie in der Lage sein, etwas damit zu tun.

Wenn nicht ich an dem Datenleser suchen beginnen würde und sehen, ob es etwas gibt jede Menge tun oder mit Datenadapter. Ich wünschte, ich könnte Ihnen eine richtige Antwort, aber ich denke, aber es Ihnen gelingt, es zu tun, ist es nicht schön sein würde. Es tut uns Leid

Andere Tipps

, wenn explizite gebundene Spalten verwendet, ist eine Option, fügen Sie ein Dataformatstring zu Ihrem Boundfield

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

sonst könnte man sich dabei die Formatierung des GridView.OnRowDataBound Ereignis

Sie können die isDate () Funktion verwenden, um zu sehen, ob etwas ein gültiges Datum ist und dann dateformatting Optionen verwenden, um es, wie Sie aussehen wollen.

Einige Beispiele für Datumsformatierung: http://datawebcontrols.com/faqs/CustomizingAppearance/FormatDateTimeData.shtml

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top