LinqDataSource и формат DateTime

Опитвам се да създам LinqDataSource за свързване към DropDownList във формуляр на ASP.NET. Искам само да покажа елементите според дата (която е едно от полетата в базата данни).

По принцип елементите, които искам да покажа, са тези, които ще се случат във фючърсите (т.е. след DateTime.Now).

Опитвах следното маркиране:

<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>

Получавам изключение за формат, което казва, че „Низът не е разпознат като валиден DateTime“, когато се опитвам да го стартирам. Въпреки това, датите в моята база данни изглеждат добре, защото DateTime.Parse работи перфектно върху тях. DateField е от тип datetime в SQL.

Какво ми липсва тук?

Благодаря!


person Hugo Migneron    schedule 27.05.2009    source източник


Отговори (3)


DefaultValue беше това, което не беше наред с кода, както беше предложено от другите.

Въпреки това, настройването на DefaultValue на

 "<%# DateTime.Now %>"

както Андомар предложи (което ще направи маркирането да изглежда нещо подобно:

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

също няма да работи, защото DataBinding изразите се поддържат само в обекти, които имат DataBinding събитие, а нито Parameter, нито ControlParameter имат такова.

За низ е доста лесно да създадете текстово поле или етикет и да поставите израза ‹%# %> в стойността на това ново поле (повече подробности тук), но беше малко по-сложно със стойност DateTime, тъй като сравняването на SQL DateTime с .NET DateTime предизвика изключение.

Може да се направи доста лесно в събитието Page_Load чрез използване

DataContext DataContext1 = new DataContext();

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

Подозирам, че се проваля на DefaultValue.

person leppie    schedule 27.05.2009

Опитвам:

DefaultValue="<%# DateTime.Now %>"
person Andomar    schedule 27.05.2009
comment
Насочи ме в правилната посока. Въпреки това не можете да използвате израз за параметър. Вижте отговора ми за повече подробности. - person Hugo Migneron; 28.05.2009