LinqDataSource и DateTime Format - PullRequest
3 голосов
/ 27 мая 2009

Я пытаюсь создать 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.

Что мне здесь не хватает?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 28 мая 2009

DefaultValue было то, что было не так с кодом, как было предложено другими.

Однако, установив DefaultValue в

 "<%# DateTime.Now %>"

, как предложил Andomar (что бы разметка выглядела примерно так:

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

также не будет работать, потому что выражения DataBinding поддерживаются только для объектов, имеющих событие DataBinding, и ни Parameter, ни ControlParameter не имеют его.

Для строки довольно легко создать TextBox или Label и поместить выражение <% #%> в значение этого нового поля (подробнее здесь ), но это было немного более усложняется значением 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();
1 голос
/ 27 мая 2009

Попробуйте:

DefaultValue="<%# DateTime.Now %>"
1 голос
/ 27 мая 2009

Я подозреваю, что это сбой на DefaultValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...