Datagrid - ItemDataBound Frage

DenisSchmidt

Grünschnabel
Hallo zusammen,

Ich habe ein Datagrid:
| Schulungsnummer | Beginn | Titel | Datum | Preis | Buchung |

Cell 0 und 1 sind versteckt, und in Cell 5 Buchung soll entweder ein Label oder ein Hyperlink erscheinen. Es gibt 3 Zustände für die Spalte Buchung: 1. Der Kunde kann Preise sehen, dann soll der Hyperlink-Text "Buchung" beinhalten, 2. Der Kunde kann keine Preise sehen, dann "Preisanfrage" 3. das Seminar hat schon begonnen, dann soll kein Hyperlink sondern ein Label angezeigt werden mit Text "Seminar geschlossen".

'Cell 0
<ItemTemplate>
<asp:Label
id="Schulungsnr"
runat="server"
Text='<%# DataBinder.Eval(Container, "DataItem.Schulungsnr") %>'>
</asp:Label>
</ItemTemplate>

Also habe ich ein ItemDataBound-Ereignis, was aber nicht funktioniert:
Code:
    Public Sub Datengrid_ItemDataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs) Handles DatenGrid.ItemDataBound
        Dim lbSnr As Label
        Dim bg As DateTime

        lbSnr = CType(e.Item.FindControl("Schulungsnr"), Label)
        bg = e.Item.Cells(1).Text()

        If bg >= Date.Now Then
            Dim lb As New Label
            lb.Text = "Schulung geschlossen"
            lb.Font.Bold = True
            e.Item.Cells(5).Controls.Add(lb)
        Else
            Dim hl As New HyperLink

            If Preise(Session("uid")) = True Then
                hl.Text = "Anmeldung"
            Else
                hl.Text = "Preisanfrage"
            End If

            hl.NavigateUrl = "Buchung.aspx?id=" & lbSnr.Text
            e.Item.Cells(5).Controls.Add(hl)
        End If
    End Sub

Warum funktioniert das nicht? Hat vielleicht jemand von euch eine Idee

Vielen Dank
Denis
 
Es ist wahrschnlich besser, dass Datum zuerst explizit von einem Text in das Datetimeformat zu konvertieren.
bg = CDate(e.Item.Cells(1).Text())

Wenn die anderen beiden Links funktionieren, scheint es so als würde die Bedingung If bg >= Date.Now Then immer falsch ergeben.
Ist den dein Text auch ein Datum und eine Zeit oder nur ein Datum ?
Beachte dass DateTime.Now immer das aktuelle Datum und die Uhrzeit sind. Wenn man ein reines Datum in ein DateTime Objekt gibt, wird daraus immer Datum und die Uhrzeit "00:00:00".
 
Vielen Dank mage,

Das Problem ist schon, dass die Spalten noch gar nicht gebunden sind, wenn das ItemDataBound-Ereignis ausglöst wird - habe ich jetzt gemerkt. Jedenfalls ergibt:

Code:
        Dim sn As int
        Dim bg As Date

        sn = CInt(e.Item.Cells(0).Text())
        bg = CDate(e.Item.Cells(1).Text())

nicht die Schulungsnummer sondern "Schulungsnr". Wie komme ich dann an die aktuelle Schulungsnummer, wärend dieses Ereignis ausgelöst wird?

(Ohne dieses Ereignis wird das Datagrid - ausgenommen natürlich der Spalte Buchung - richtig gefüllt).
 
Zurück