2009-08-01 8 views
1

ObjectDataSourceを使用してビジネスオブジェクトにバインドされたFormViewコントロールを含むASP.Net 3.5ページがあります。ObjectDataSourceを使用してDateTimeフィールドの2ウェイデータバインドを行う方法

ビジネスオブジェクトのプロパティの1つにDateTime型があり、DateTimeプロパティなど、このオブジェクトに対して2方向のデータバインドを行いたいとします。ここに示されているよう

私は、DateTimeプロパティを表示するためのカスタムフォーマットを使用します。

<asp:TextBox ID="TextBoxDate" runat="server" Text='<%# Bind("Date", "{0:d MMM yyyy HHmm}") %>' /> 

それはうまく表示されます。 問題は、アップデートを実行しようとしたときです。

文字列が有効なDateTimeとして認識されませんでした。

My ObjectDataSourceには、このプロパティの明示的に設定されたUpdateParameterが含まれていますが、違いはありません。

<UpdateParameters> 
     <asp:Parameter Name="Date" Type="DateTime" /> 
    </UpdateParameters> 

私は間違っていますか?

UPDATE:

それは私が

{0:d MMM yyyy HH:mm} 

に私のバインド式で私のフォーマット文字列を変更した場合

HHミリメートル間のコロンに注意してください)ことが判明

...双方向データバインディングは期待通りに機能します。残念ながら、これはまさに私が望んでいたものではありません。私はコロンなしで24時間の時計を使用することを望んでいたので、私の元のフォーマット文字列。これはまだ動作していません、なぜ私は知りたいですか?さらに、私はこのフレームワークの欠点を回避するにはどうすればよいかを知りたいですが、宣言的なデータバインドはやっています。

ありがとうございました。

+0

Scott:私の答えをチェックして申請してもらえますか? –

答えて

1

Bind()方法、実際には二つの方法でデータバインディングを提供し、Evalあなたのシナリオでは

を結合一方向のデータを提供し、あなたはかなりの日付書式を設定し、ユーザーにデータを表示しているときに、FormViewコントロールdataboundイベントに日付を変更する必要がありますバインドプロパティ。

このようにして、フィールドの更新時にエラーは発生しません。

+0

Muhammad、このバインド式を使用して宣言的バインドを行うことができないことをお勧めしますか?<%#Bind( "Date"、 "{0:d MMM yyyy HHmm}")%> そして、 DataBoundイベントのコードでフォーマットを設定する必要がありますか? これは役に立ちましたので、私はあなたの答えをupvotedしましたが、DataBoundイベントにコードを記述するのではなく、宣言的バインドを行うことができると本当に期待していました。 –

+0

あなたは何をしようとしていますか?フォーマットをdatetimeに設定すると、表示されてもOKですが、同じフォーマットされたパラメータがアップデートのために送信されたときに問題が発生しています。 –

+0

問題は2つの方法で解決することができます.1つは私が私の答えであなたが表示しているときにデータバインドを変更するために言及したものです。 –

1

FormViewコントロールのItemUpdatingイベントをオーバーライドし、そのパラメータの値を変更して、正しい形式であることを確認できます。ほとんどの場合、これは意味:

  1. はe.NewValues(「日」)から値を取得
  2. 文字列値を解析DateTimeオブジェクトへ
  3. 戻っEに値を代入します。NewValues( "Date")

私は過去にこのようなことを人々がドル記号を入力する可能性がある通貨フィールドで入力する必要がありました。

関連する問題