- ベストアンサー
コード側からDataGridの列を追加する方法
- Visual Studio 2003の開発でDataGridの列をコード側から追加する方法について質問します。要求された列のヘッダーにチェックボックスを追加する方法も教えてください。
- 現在、列の追加はできていますが、チェックボックスを追加する際に問題が発生しています。テキストにHTMLを埋め込んでこの問題に対処しようとしていますが、イベントが正しく動作しません。列の追加と同時に正しいチェックボックスコントロールを追加する方法についてアドバイスをお願いします。
- ASP.NET(C#)で、.NET Framework 1.1を使用しています。コードビハインドからDataGridの列を追加し、チェックボックスコントロールを正しく追加する方法についてアドバイスをお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 当初の目的の「チェックボックスのイベント」が拾えていない > 状況です。 ポストバックした時、ItemDataBound イベントが発生せず、CheckBox を 含む追加行が再生されないからではないですか。 ItemCreated イベントで行(CheckBox 含む)を追加してみてください。 > http://www.kumei.ne.jp/c_lang/form/form_34.htm > 上記URLを参考にし、下記ソースを書いてみたのですが それは ASP.NET とは関係ないこと分かります? 極々基本的なことで、 そこが分かってないと掲示板で質問して解決するのは無理があると思い ます。
その他の回答 (1)
- WebSurfer
- ベストアンサー率55% (33/59)
> 現在は動的に列追加は出来ているのですが、 それはどういうタイミングで、どのように実現しているのですか? そのあたりが分からないと、回答困難です。 例えば、ItemDataBound イベントで行っているとすると、以下のようにしては というようなアドバイスができるのですが。 void Item_Bound(Object sender, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Header) { TableHeaderCell headerCell = new TableHeaderCell(); headerCell.Controls.Add(new LiteralControl("追加ヘッダ<br />")); CheckBox cb = new CheckBox(); cb.AutoPostBack = true; headerCell.Controls.Add(cb); e.Item.Cells.Add(headerCell); } else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { TableCell cell = new TableCell(); cell.Controls.Add(new LiteralControl("追加列")); e.Item.Cells.Add(cell); } else if (e.Item.ItemType == ListItemType.Footer) { TableCell cell = new TableCell(); cell.Controls.Add(new LiteralControl("追加フッタ")); e.Item.Cells.Add(cell); } }
お礼
>それはどういうタイミングで、どのように実現しているのですか? 大変失礼しました。でもお教えいただいたItem_Boundのタイミングでバッチリです! 大変感謝いたします。 上記のソースを参考に組んでみたところ、動的に列の追加は出来ました。 しかし、当初の目的の「チェックボックスのイベント」が拾えていない 状況です。 http://www.kumei.ne.jp/c_lang/form/form_34.htm 上記URLを参考にし、下記ソースを書いてみたのですが、どうもイベント が動作してくれません。 ---------------------------------------------------------------- // グリッドバウンド private void grid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Header) { // ヘッダの場合 // ヘッダ宣言 TableHeaderCell headerCell = new TableHeaderCell(); // ヘッダタイトル headerCell.Controls.Add(new LiteralControl("追加ヘッダ<br />")); // チェックボックス生成 CheckBox cb = new CheckBox(); // ID割り当て cb.ID = "Checkbox10"; // ポストバック cb.AutoPostBack = true; // イベント割り当て cb.CheckedChanged += new EventHandler(cb_CheckedChanged); // 生成したチェックボックスの追加 headerCell.Controls.Add(cb); e.Item.Cells.Add(headerCell); } else if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { // アイテム TableCell cell = new TableCell(); cell.Controls.Add(new LiteralControl("追加列")); e.Item.Cells.Add(cell); } } // チェックボックスイベント public void cb_CheckedChanged(object sender, EventArgs e) { // 各種処理。ここに到達してくれない } ---------------------------------------------------------------- cb.CheckedChanged += new EventHandler(cb_CheckedChanged); この記述のほかに何か必要なのでしょうか。 よろしければ教えていただけると助かります。
お礼
ItemCreated イベントでやりたいことが実現できました! 無知ですみませんでした。m(__)m