dポイントプレゼントキャンペーン実施中!

Visual Studio 2003の開発で躓いてしましました。
ネットで検索しても出てこないため、こちらにて質問させてください。

やりたいことはDataGrid(DataGridViewではない)の列をコード側から
動的に追加したいのですが、ただ追加させるだけではなく、
その追加させる列のヘッダーにチェックボックスコントロールを
入れたいのです。下記イメージの3列目です。

イメージ
_________
|表題1..|表題2..|動的1..|
|_□_|_□_|_□_|   ← ヘッダー(チェックボックス付き)
|データ..|データ..|データ..|
|___|___|___|
|データ..|データ..|データ..|
|___|___|___|
|データ..|データ..|データ..|
|___|___|___|


現在は動的に列追加は出来ているのですが、チェックボックスを
いれるのに躓いております。

苦肉の策として
 Text = "<input id=\"○○○\" type=\"checkbox\" OnCheckChanged=\"△△△\" >"
とさせ、テキストに強引にHTMLを埋め込んでいるのですが、上記記載
のイベント△△△が動作してくれません。(idはcheck1,check2,…
のようにループで割り振っていきます。)

イメージにある表題2の下にあるチェックボックスはイベントを
拾ってくれているのですが、動的に追加した列のチェックボックス
のイベントが拾えず、四苦八苦しております。

理想はコードビハインド側から表題2列を隣に複製させること
ができればいいのですが・・・。

コードビハインド側から列を追加し、Textではなく、ちゃんとした
チェックボックスコントローラを追加する方法をご享受ください。

環境はASP.NET(C#) で.net Frameworkは1.1です。

よろしくお願いします。
 

A 回答 (2件)

> 当初の目的の「チェックボックスのイベント」が拾えていない


> 状況です。

ポストバックした時、ItemDataBound イベントが発生せず、CheckBox を
含む追加行が再生されないからではないですか。

ItemCreated イベントで行(CheckBox 含む)を追加してみてください。


> http://www.kumei.ne.jp/c_lang/form/form_34.htm
> 上記URLを参考にし、下記ソースを書いてみたのですが

それは ASP.NET とは関係ないこと分かります? 極々基本的なことで、
そこが分かってないと掲示板で質問して解決するのは無理があると思い
ます。
    • good
    • 0
この回答へのお礼

ItemCreated イベントでやりたいことが実現できました!
無知ですみませんでした。m(__)m

お礼日時:2013/05/19 21:18

> 現在は動的に列追加は出来ているのですが、



それはどういうタイミングで、どのように実現しているのですか?

そのあたりが分からないと、回答困難です。

例えば、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);
}
}
    • good
    • 0
この回答へのお礼

>それはどういうタイミングで、どのように実現しているのですか?
大変失礼しました。でもお教えいただいた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);
この記述のほかに何か必要なのでしょうか。
よろしければ教えていただけると助かります。

お礼日時:2013/05/14 02:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!