2

UI で GridView 行を削除すると (CommandName="Delete" の LinkBut​​ton を介して)、ビューは自動的に更新されず、他のアクション (手動でページを更新し、別の場所に移動して再び戻るまで) を実行するまで、削除された行が表示され続けます。等)。

デバッガーでは、行が正常に削除され、RowDeleting イベントと RowDeleted イベントの両方が発生しますが、GridView の PreRender イベントはその後発生しません (対照的に、その PreRender イベント、ページを最初に読み込むとき、新しい行を追加するときに発生します)など)。

この問題が発生することなく、同様の構成で GridViews を使用しましたが、明らかな違いは見られません。PreRender イベントの前にプロセスが中止されているようですが、例外はスローされていません。デバッガーで RowDeleted イベントの最後をステップオフすると、プロセスが正常に完了したかのように UI に戻ります。

問題や解決策を探すべきアイデアはありますか? 関連するその他の詳細: GridView は SqlDataSource にバインドされています。データ ソースは DeleteCommand を宣言していません。RowCommand ハンドラーでストアド プロシージャを呼び出して削除を処理します。その後、DataBind() を使用して GridView を再バインドします。この時点で、GridView の Rows.Count が期待どおりに 1 つ減少していることがわかります。RowDeleted イベントを通じてすべて問題ないように見えますが、何もありません。

更新: RowCommand ハンドラーではなく、RowDeleting ハンドラーで SP を呼び出して削除しようとしましたが、違いはありませんでした。行は引き続き削除されますが、GridView の PreRender を呼び出さずに処理が終了し、削除された行は、さらに UI の操作によってビューが更新されるまで表示されたままになります。

UPDATE2: コントロールの PreRender イベントに先行するページの PreRender イベントも取得していません。RowDeleted イベントから抜け出すことが行末のように見えるため、物事が停止している場所を見つけることができるかどうかを確認するために、逆方向に作業を続けます...

UPDATE3:私はもう少し突っ込んできましたが、コードは複雑になりますが、単純な行 (レコード) の削除を行うだけの GridView の SqlDataSource で DeleteCommand を宣言してから、RowDeleted ハンドラーで動作させることができました。一次削除とともに発生する必要がある、ストアドプロシージャにある追加のものを呼び出します。一次削除をある場所で行い、関連する処理を別の場所で行うのはあまり便利ではありませんが、少なくとも機能しています。

しかし、これから何を結論付ければよいかわかりません: 適切なページのライフサイクルには DeleteCommand が必要ですか? RowCommand ハンドラーのストアド プロシージャで削除を行うべきではありませんか? 他の何か?具体的には、最初の試行で何が壊れているかを特定できたらいいのにと思います...

4

2 に答える 2

0

行を削除した後、グリッドビューをデータベースからの新しいデータにバインドするだけです。

于 2010-12-21T06:31:43.157 に答える
0

PreRender イベントは、他のページのポストバックで発生しますか? このMSDN の記事(「サーバー コントロールのポストバック イベントと非ポストバック イベント」の見出しの下、メモの後の段落)の情報を見ると、ページとすべての子コントロールに対して Init イベントと Load イベントだけが発生するのではないかと思います。

于 2010-12-31T04:04:36.833 に答える