1

ObjectDataSource を使用してビジネス オブジェクトにバインドされた FormView コントロールを含む ASP.Net 3.5 ページがあります。

ビジネス オブジェクトのプロパティの 1 つは DateTime 型であり、DateTime プロパティを含め、このオブジェクトに対して 2 方向のデータ バインディングを行いたいと考えています。

次に示すように、DateTime プロパティを表示するためにカスタム形式を使用します。

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

ちゃんと表示されます。問題は、更新を実行しようとしたときです。次の例外が発生します。

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

私の ObjectDataSource には、このプロパティに対して明示的に設定された UpdateParameter が含まれていますが、違いはないようです。

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

私は何を間違っていますか?

アップデート:

バインド式のフォーマット文字列を次のように変更すると、

{0:d MMM yyyy HH:mm}

( HHmmの間のコロンに注意してください)

...その後、双方向のデータバインディングが期待どおりに機能します。残念ながら、これはまさに私が望んでいたものではありません。コロンなしで 24 時間時計を使用することを望んでいたため、元の書式文字列です。これはまだ機能していません。その理由を知りたいですか? さらに良いことに、フレームワークのこの欠点を回避する方法を知りたいのですが、それでも宣言的なデータバインディングを行います。

ありがとう。

4

2 に答える 2

1

Bind()メソッド、実際には双方向のデータバインディングをEval提供し、一方向のデータバインディングを提供します

databoundシナリオでは、バインドプロパティで日付形式を設定するのではなく、ユーザーにデータを表示するときに、formviewイベントで日付を変更する必要があります。

このようにして、フィールドを更新するときにエラーが発生することはありません。

于 2009-08-02T03:32:51.757 に答える
1

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

  1. e.NewValues("Date") から値を取得する
  2. 文字列値を解析して DateTime オブジェクトにする
  3. 値を e.NewValues("Date") に割り当てます

私は過去に通貨フィールドでこのようなことをしなければなりませんでした。ドル記号を入力する可能性があり、そのままにしておくとエラーが発生する可能性があります。

于 2009-08-02T06:39:09.087 に答える