Domanda

Ho una pagina ASP.Net molto semplice che funge da front-end per una procedura memorizzata. Esegue solo la procedura e mostra l'output utilizzando un controllo gridview: meno di 40 righe di codice totale, incluso il markup aspx. La stessa procedura memorizzata è molto ... volatile. È utilizzato per vari scopi e il formato di output cambia regolarmente.

Il tutto funziona alla grande, perché il controllo gridview non ha davvero bisogno di preoccuparsi di quali colonne restituisce la procedura memorizzata: le mostra semplicemente sulla pagina, che è esattamente quello che voglio.

Tuttavia, il database su cui viene eseguito ha un numero di colonne datetime in tutto il luogo in cui la porzione di tempo non è davvero importante, viene sempre azzerata. Quello che vorrei poter fare è controllare la formattazione delle sole colonne del datetime nel gridview, senza mai sapere con precisione quali colonne saranno. Ogni volta che una colonna nei risultati ha un tipo datetime, basta applicare una determinata stringa di formato che taglierà il componente time.

So che potrei convertirmi in un varchar nel database, ma non vorrei davvero fare in modo che gli sviluppatori si preoccupassero della formattazione della query e questo appartiene comunque al livello di presentazione. Altre idee?


Finalmente ha funzionato in modo accettabile (o almeno migliorato) usando questo codice:

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
È stato utile?

Soluzione

Se stai generando automaticamente le colonne che sembra che tu sia. La procedura per utilizzare la formattazione delle griglie è terribile.

Dovresti scorrere tutte le colonne della griglia, probabilmente nell'evento databound e applicare un'espressione di formattazione a qualsiasi colonna che trovi sia una colonna di data.

Se non stai generando automaticamente e hai colonne di codifica nella tua griglia, saprai anche alreayd quali colonne sono colonne di date e puoi applicare la stessa espressione di formato a quella colonna. È qualcosa come {0: ddMMyyyy} ma dovrai cercarlo perché probabilmente non è del tutto corretto.

in modo da riassumere il hook nell'evento databound. scorrere la raccolta di colonne e accertarsi che la colonna sia una colonna di data. Mi chiedo come potresti farlo :). Se decidi che una colonna è una colonna di data imposta la sua espressione di formato.

Voila

---------------------- MODIFICA

Ok, che ne dici di scrivere il tuo metodo che restituisce i dati dal proc per restituire un datatable. È possibile associare il datatable alla griglia dopo aver formattato i dati nel datatable. La collezione datatable.Columns è una raccolta di DataColumns e questi hanno una proprietà DataType. Potresti cercare System.DateTime o DateTime e potrebbe essere una delle proprietà della proprietà DataType stessa :). So che è ingombrante ma quello che stai chiedendo sarà sicuramente ingombrante. Dopo aver identificato le colonne della data, potresti essere in grado di farci qualcosa.

Altrimenti inizierei a guardare i lettori di dati e vedere se c'è qualcosa che puoi fare lì o con adattatori di dati. Vorrei poterti dare una risposta adeguata, ma penso che comunque riuscirai a farlo, non sarà carino. Siamo spiacenti

Altri suggerimenti

se è possibile utilizzare colonne esplicite associate, aggiungere un DataFormatString al boundField

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

altrimenti potresti guardare a formattare l'evento GridView.OnRowDataBound

Puoi usare la funzione isDate () per vedere se qualcosa è una data valida e quindi usare le opzioni di formattazione della data per farlo sembrare come desideri.

Alcuni esempi per la formattazione della data: http://datawebcontrols.com/faqs/CustomizingAppearance/FormatDateTimeData.shtml

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top