- - PR -
GridViewのセル内への動的コントロール追加
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-09-04 16:47
お世話になってます。
VS2008、C#にてWEBアプリを開発しております。 基本的なことかもしれませんが、教えていただきたく。 GridViewにて、横軸=年月列、縦軸=作業項目とし、セルを塗りつぶすことによるスケジューラを作成したいと思い、 動的に期間の列を生成し、GridViewのデータソースに作成したDataTableをセットしています。 見栄えはイメージ通りになったのですが、各行の塗りつぶしたセルにリンクボタンを貼り付けたいのですが どうもプログラムからのコントロールの追加がうまくいかず、困っております。 試しに以下の通り、RowDataBoundイベントでボタンを追加しようとしました。 protected void Grid1_RowDataBound(object sender, GridViewRowEventArgs e) { Button myButton = new Button(); myButton.Text = "aaaa"; e.Row.Cells[0].Controls.Add(myButton); } とくにエラーにもならないのですが、コントロールが追加されませんでした。 これはテンプレート列でないとコントロールの追加ができないということでしょうか? もしそうだとしたら、DataTableをデータソースとしたGridViewの列をテンプレート列にすることは可能なのでしょうか? 何か良い案がありましたら教えて頂けると助かります。 (そもそもGridViewを使うべきかも怪しいのですが・・・) ちなみに保有しているテーブルデータは、 作業項目 開始日 終了日 作業A 2008/09/03 2008/09/30 作業B 2008/11/25 2009/03/25 といった感じで、これを基に動的に最小開始日〜最大終了日の年月列を作成しております。 |
|
投稿日時: 2008-09-04 23:28
こちらでは、BoundFieldにボタンを追加することができました。
Grid1_RowDataBoundにブレークをはってステップ実行したらその箇所はちゃんと通ってますか? RowCreatedで追加するほうが妥当かもしれません。 |
|
投稿日時: 2008-09-05 12:59
べるさん、ご回答ありがとうございます。
原因が分かりました。コントロール追加後に余計なコードがあり、 追加したコントロールが消えてしまっていたようです。 追加した後に e.Row.Cells[0].Text = ""; があるとダメでした。 GridViewのCellsとControlsは別物だと思い込んでたのですが、 CellsのTextを操作すると、その中のControlsは消えてしまうようですね。 思い込みから余計なソースの掲示は省いてました。すみませんでした・・・ |
1