1

私はc#でasp.netに取り組んでいます。テンプレートフィールド列を持つグリッドビューがあります。データはSQLデータベースから取得されます。アイテムテンプレートにリンクボタンがあります。リンクボタンはRoweditingイベントを呼び出して、編集を有効にします。これは最初の行で正常に機能します。しかし、他の行のいずれかをクリックしても何も起こらず、イベントが発生することはありません。

どうすればこれを解決できますか?

ありがとう..

4

1 に答える 1

3

ほとんどの場合、Page_Load イベントでグリッドをデータ バインドしています。この場合、ASP.NET ページ ライフサイクルが邪魔をしています。(提供されたリンクの記事を必ずお読みください。すべての .NET 開発者は Page_Lifecycle について知る必要があります。それ以外の場合、この動作など、混乱を引き起こす可能性のある多くの動作について説明しています。)

Page_Load イベントは、すべてのポストバック (すべてのボタン クリック、またはポストバックをトリガーするすべてのイベント) で発生します。

この場合、次の 2 つのオプションが考えられます。

  1. データ バインディング コードを Page_Init に移動します
  2. if(!Page.IsPostback)ブロック内の Page_Load にデータ バインディングを配置します。

本質的に、問題は、ページが最初の読み込みでデータ バインドされていることです。次に、ポストバックをトリガーする何らかのクライアント アクションによって編集イベントがトリガーされます。このポストバックでは、Page_Load が最初に発生し、GridView が再バインドされ、以前の読み込みで関連付けられていたすべてのデータが消去されます。したがって、RowEditing イベントが発生すると (コントロール イベントは常に Page_Load 後に発生します)、何もする必要はありません。ポストバック前に存在していたデータへの参照はすべてなくなります。

バインディング コードを Page_Init に移動すると、ページがバインドされ、すべての Viewstate がページに再適用され、上記のシナリオでポストバックで失われたデータが復元されるため、これを回避できます。

于 2012-09-17T19:20:42.657 に答える