2009-05-27 7 views
3

私はASP.NETフォームのDropDownListにバインドするLinqDataSourceを作成しようとしています。私は日付(データベースのフィールドの1つ)に従って要素を表示したいだけです。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.Parseが完全に機能するので、データベースの日付は問題ないようです。 DateFieldの型はSQLのdatetimeです。

私はここで何が欠けていますか?

ありがとうございます!

答えて

3

DefaultValueは、他の人が示唆されたようなコードが間違っていたものでした。しかし

、Andomarは、マークアップは次のようなものに見えるように思われる(提案のように

"<%# DateTime.Now %>" 

DefaultValue設定:データバインド式はオブジェクトのみでサポートされているので

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

はどちらか動作しません。データバインドイベントがあり、ParameterまたはControlParameterには1つもありません。

文字列の場合は、TextBoxまたはLabelを作成し、その新しいフィールドの値に<%#%>式を入れるのはかなり簡単ですが(詳細はhere)、DateTime値では少し複雑です.NET DateTimeを持つSQL DateTimeが例外を引き起こしました。

それは正しい方向に私を入れて

DataContext DataContext1 = new DataContext(); 

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

私はそれがDefaultValueで失敗していると思う。

1

試してみてください。

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

を使用して、Page_Loadイベントで非常に簡単に行うことができます。ただし、パラメータに対して式を使用することはできません。詳細は私の答えを見てください。 –

関連する問題