2009-05-27 2 views
3

Я пытаюсь создать LinqDataSource для привязки к DropDownList в форме ASP.NET. Я хочу показать только элементы в соответствии с датой (которая является одним из полей в базе данных).LinqDataSource и формат DateTime

В принципе, элементы, которые я хочу показать, это те, которые произойдут во фьючерсах (то есть после 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

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

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

"<%# DateTime.Now %>" 

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

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

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

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

Я подозреваю, что он не работает по умолчанию.

1

Try:

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

Поставь меня в правильном направлении. Однако вы не можете использовать выражение в параметре. См. Мой ответ для более подробной информации. –

Смежные вопросы