- PR -

GridViewのセル内への動的コントロール追加

1
投稿者投稿内容
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 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
といった感じで、これを基に動的に最小開始日〜最大終了日の年月列を作成しております。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-09-04 23:28
こちらでは、BoundFieldにボタンを追加することができました。
Grid1_RowDataBoundにブレークをはってステップ実行したらその箇所はちゃんと通ってますか?
RowCreatedで追加するほうが妥当かもしれません。
ベテラン
会議室デビュー日: 2006/11/10
投稿数: 64
投稿日時: 2008-09-05 12:59
べるさん、ご回答ありがとうございます。

原因が分かりました。コントロール追加後に余計なコードがあり、
追加したコントロールが消えてしまっていたようです。

追加した後に
 e.Row.Cells[0].Text = "";
があるとダメでした。

GridViewのCellsとControlsは別物だと思い込んでたのですが、
CellsのTextを操作すると、その中のControlsは消えてしまうようですね。
思い込みから余計なソースの掲示は省いてました。すみませんでした・・・
1

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