2011-07-07 13 views
4

私のAsp.net Webページでは、ObjectDataSourceにバインドされたデータであるGridViewコントロールがあります。ユーザーはGridViewで直接行を編集できます。更新が検証に失敗することがあります。これが起こると、編集モードのまま更新されていた行が欲しいです。ObjectDataSource更新イベント中にGridview編集をキャンセルします

onUpdatingのイベントハンドラでは、イベントargsオブジェクトにcancelプロパティがあります。しかし、更新がonUpdatedイベントハンドラで失敗したかどうかを確認する必要があり、e.Cancelプロパティがありません。

更新が失敗した場合、GridView行を編集モードのままにする方法を知る必要があります。

+0

編集モードを維持することができますか何らかの種類のデータベース検証(戻り値を持つストアドプロシージャ)またはASP.NET検証(ASP.NET Validatorを@Ovaisとして提案)を使用していますか? –

+0

データアクセス層は、データをデータベースに保存する前にデータを検証します。だから私は、更新が検証に失敗したと言うとき、私は、データアクセス層が無効なデータとしてフラグを立てたことを意味します。 – epotter

答えて

4

非常に単純に、あなたは「更新が検証に失敗した」とは何を意味するのですか?e.KeepInEditMode = true;

protected void GridView1_RowUpdated(object sender, GridViewUpdatedEventArgs e) 
{ 
    e.KeepInEditMode = true; 
} 
+0

これは動作するようですが、行を編集モードにするかどうかを示す変数を設定するだけです。 – epotter

0

この問題を解決する1つの方法は、検証がパスしない場合にユーザーに要求を送信するようにユーザーを制限する検証コントロールを使用することです。

グリッドビューを更新モードに保つには、その編集インデックスプロパティを使用する必要があります。これは、グリッドビューが編集モードでない場合、通常は編集インデックスが-ve値に設定されていますが、ある正の整数値に設定されます。

あなたもこのリンクを参照できます:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridviewupdatedeventargs.keepineditmode.aspx

+0

検証は複雑で、いくつかのデータベース呼び出しが必要です。それは、クライアント側で試して検証するよりも、サーバ側で行う方が効率的になります。 – epotter

0

が変数にEditIndex値を保存します。 Gridview更新buをキャンセルし、Gridviewを編集モードに保つために、以前に保存したインデックス値でEditIndex値を再設定することができます。

関連する問題