Convert na typ DateTime   zodpovězená otázka

ASP.NET WebForms

Zdravím, prosím o radu při převodu řetězce na typ DateTime v tomto kódu:

Protected Sub GridView2_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
        If e.Row.RowType = DataControlRowType.DataRow Then
            For Each row As TableCell In e.Row.Cells
                If (Convert.ToDateTime(e.Row.Cells(5).Text) > DateTime.Now.Date) Then
                    e.Row.Cells(5).ForeColor = System.Drawing.Color.Red
                End If
            Next
        End If
    End Sub

po spuštění tohoto kódu se objeví hláška: Řetězec nebyl rozpoznán jako platný typ DateTime.

Do buňky Cells(5) se načítá datum z DB, které je ve formátu DATETIME. V nápovědě jsem vyčetl něco o parsování, ale s tím si nevím rady.

Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

Vlastní parsování hodnoty DateTime není problém, na to použijete metodu DateTime.Parse (https://msdn.microsoft.com/cs-cz/library... případně DateTime.ParseExact (https://msdn.microsoft.com/cs-cz/library... podle toho v jakém formátu, kultuře apod. máte textovou reprezentaci.

Zde je ale hlavní problém v tom, že vůbec nějaké parsování chcete provádět. Ve vašem kódu se datum získaný z databáze převádí na textový řetězec do nějakého zvoleného formátu nebo podle aktuální kultury uživatele podle globalizace apod. za účelem jeho zobrazení v UI. Tato textová reprezentace by samozřejmě neměla sloužit k ničemu jinému než pro to zobrazení. A to nemluvím o tom, že při odkazu indexem e.Row.Cells(5).Text nikdo neví o jaké pole jde a že se zrovna jedná o datum.

Dále ve vašem kódu máte nějaký nesmyslný For Each, ve kterém procházíte jednotlivé sloupce aktuálního řádku (a aktuální sloupec si nazvete "row") a proměnnou row pak (naštěstí) nikde nepoužijete.

Správně je tedy pro odvozenou logiku jako barvu apod. použít přímo původní hodnotu typu DateTime z underlying data objektu tj. vlastnost e.Row.DataItem viz

https://msdn.microsoft.com/cs-cz/library...

Pokud prvek GridView plníte pomoci sqldatasource (což je samoosobě "prasárna"), tak bude DataItem typu DataRowView a na příslušný sloupec se odkážete jeho jménem, tak jak je ve zdrojovém SQL. Pokud používáte model binging (což byste měl) bude DataItem váš model a na příslušný sloupec se odkážete krásně čistě a hlavně typově.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback