3 Stimmen

LinqDataSource und DateTime-Format

Ich versuche, eine LinqDataSource zu erstellen, um an eine DropDownList in einem ASP.NET-Formular zu binden. Ich möchte nur die Elemente nach einem Datum anzeigen (die eines der Felder in der Datenbank ist).

Im Grunde genommen sind die Elemente, die ich anzeigen möchte, diejenigen, die in der Zukunft (d. h. nach DateTime.Now) auftreten werden.

Ich habe das folgende Markup ausprobiert:

<asp:DropDownList runat="server" ID="DropDownList1" 
    AppendDataBoundItems="True" DataSourceID="LinqDataSource1"
    DataTextField="TextField" DataValueField="ValueField">
</asp:DropDownList>
<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="DataContext1" TableName="Table" 
    Where="DateField &gt;= @DateField">
    <WhereParameters>
        <asp:Parameter DefaultValue="DateTime.Now" Name="DateField" 
            Type="DateTime" />
    </WhereParameters>
</asp:LinqDataSource>

Ich erhalte eine Formatausnahme, die besagt, dass "die Zeichenfolge nicht als gültige DateTime erkannt wurde", wenn ich versuche, sie auszuführen. Die Daten in meiner Datenbank scheinen jedoch in Ordnung zu sein, denn DateTime.Parse funktioniert einwandfrei mit ihnen. Das DateField ist in SQL vom Typ datetime.

Was übersehe ich hier?

Danke!

3voto

Hugo Migneron Punkte 4777

El DefaultValue war das, was mit dem Code nicht in Ordnung war, wie von den anderen vorgeschlagen wurde.

Allerdings ist die Einstellung der DefaultValue zu

 "<%# DateTime.Now %>"

wie Andomar vorschlug (wodurch das Markup etwa so aussehen würde :

<WhereParameters>
                <asp:Parameter DefaultValue="<%# DateTime.Now %>" Name="DateField" Type="DateTime" />
</WhereParameters>

wird auch nicht funktionieren, da DataBinding-Ausdrücke nur für Objekte unterstützt werden, die ein DataBinding-Ereignis haben, und weder Parameter o ControlParameter haben einen.

Für eine Zeichenkette ist es recht einfach, eine TextBox oder ein Label zu erstellen und den <%# %>-Ausdruck in den Wert dieses neuen Feldes einzufügen (weitere Einzelheiten aquí ), aber mit einem DateTime-Wert war es etwas komplizierter, da der Vergleich eines SQL DateTime mit einem .NET DateTime eine Ausnahme verursachte.

Dies kann ganz einfach im Page_Load-Ereignis geschehen, indem man

DataContext DataContext1 = new DataContext();

    var c = from a in DataContext1.Field
            where a.DateField >= DateTime.Now
            select a;
    DropDownList.DataSource = c;
    DropDownList.DataBind();

1voto

leppie Punkte 111830

Ich vermute, dass es am DefaultValue scheitert.

1voto

Andomar Punkte 224164

Essayez :

DefaultValue="<%# DateTime.Now %>"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X