none
GridViewの項目削除について RRS feed

  • 質問

  • GridVeiwで動的な表示項目を設定しようとしています。

    デザインモードで、デフォルト表示項目(テンプレート列にラベルを配置)を
    設定して、プログラムで動的な表示項目の設定を行っています。
    (GridViewHoge.Columns.Add(hogeField))

    1回目の実行
     項目AAAが選択:デフォルト3件 特有項目5件 → OK

    ↓ GridViewHoge.Columns.RemoveAt(idx) で、特有項目を削除。


    2回目の実行
     項目BBBが選択:デフォルト3件 特有項目4件 → NG

    2回目の実行で、テンプレート列に配置したラベルが取得できない
    (FindControlで nothingが返却される)状況が発生してしまいます。

    複数配置したラベルのうち、最後(右端のテンプレート列)のラベルが
    取得できなくなり、3回実行すると、全てのラベルが取得できません。

    ヘッダのテキストやカウントは正しいので、(デバッガでも確認)
    削除するインデックスの指定は正しく行われています。

    GridViewHoge.Columns.RemoveAt(idx)を実行すると、
    テンプレート列のラベルは取得できなくなるのでしょうか。

    GridViewHoge.Columns.RemoveAt(idx)を実行しなければ、ラベルは取得
    できますが、前回実行時の追加列が削除できません。

    どなたか同じ現象が発生しておられる方はおられますか。
    また、解決策をご存知の方が折られれば教えてください。

    よろしくお願いします。

     

    2006年12月26日 8:41

すべての返信

  • この情報だけだと動的な項目設定(AddやRemove)の対応がきちんと取れていないのではないか、というように思えてしまいます。
    プログラムにどういう記述をしているかが提示されないと何がおきているかだれも推測できないんじゃないかなぁ。。。
    2006年12月26日 16:44
  • 動的にカラムを追加したり削除したりすると、1度目の表示の時にはいいんですが、2度目の表示の時はおかしくなるということは経験しています。たぶん、GridViewが内部に持っている状態と、GridViewがレンダリングされる直前で行が変更されることにより、ポストバックされてきた状態との整合が崩れているからではないかと思っているんですが、詳しいことは私もわかりません。この部分は私も興味がありますので、なんとか個人的にもすっきりしたいと思っているところではあるんですが・・・。
    上記のことと同じ現象かどうかわかりませんが、よろしければ再現できるミニマムコードを見せてもらえませんでしょうか?

    2006年12月27日 1:00
    モデレータ