- PR -

【ASP.NET】DataGridのイベントが実行されない現象

1
投稿者投稿内容
にし
会議室デビュー日: 2002/06/18
投稿数: 18
お住まい・勤務地: 東京都
投稿日時: 2002-08-08 15:51
ボタンのClickイベント等で、DataGridの列の追加処理&Bindをした場合、DataGridのPageIndexChanged,ItmeCommand などのイベントが発生しない現象に悩まされていたのですが、マイクロソフト社より3週間越しで回答がきましたので、それを元に私の理解を交えて、私なりの言葉で書いておきます。

【原因】
DataGrid の列である BoundColumn は、リクエストごとに破棄される。
ページ番号をクリックすることにより、ポストバックされ、DataGrid の列情報が破棄される。
列数が 0 となった DataGrid は、存在しないコントロールとして扱われるため、以降のイベントなどは一切発生しなくなる。
AutoGenerateColumns プロパティが False 且つデザインで列を設定していない場合、リクエストごとに DataGrid の列を生成する必要がある。

【解決方法】
1.Page_LaodイベントでColumnの追加と、DataBind処理を追加する。
  # Columnの追加だけだと、同じ現象が発生します。
2.デザインでDataGridにダミーの連結列を作り、コーディング内ではダミー列を削除(クリア)
  してから、列を追加する。

解決方法1の場合、Page_Loadイベントと他のイベントとで2回データをBindすることになります。
私の抱えていた案件の場合、DataGridの表示ページにより、DataSetの中身が変わる特殊なものでしたので、二回DataSetを作成するのは無駄と考え、解決方法2を使用しました。
MSからの回答は、私が作成して提出したサンプルが単純な作りだった為、解決方法1で手を加えたサンプルが返ってきました。

以上、ご参考までに。
1

スキルアップ/キャリアアップ(JOB@IT)