0

GridViewユーザーデータを保持する があります。Page_Loadメソッドが呼び出されると、 を使用してデータを取得し、それDataTableを にバインドしGridViewます。各行の最後に、CheckBox. この CB は、ユーザーが編集したいエンティティへのポインターとして使用されます。

私の問題は、チェックボックスのCheck_Changedイベントです。コントロールがプログラムで生成されている場合、ハンドラーを追加する方法がわかりません。行のインデックスも必要です (フィールド値も可能ですが、列ヘッダーと列自体は非表示になっています)。

 foreach (GridViewRow gvr in grdMitgliedsliste.Rows)
 {
       //add checkbox for every row
       TableCell cell = new TableCell();
       CheckBox box = new CheckBox();
       cell.Controls.Add(box);
       gvr.Cells.Add(cell);

       //Hide columns for userid, status, etc. 
       gvr.Cells[0].Visible = false;
       gvr.Cells[3].Visible = false;
       gvr.Cells[4].Visible = false;
       gvr.Cells[5].Visible = false;
       gvr.Cells[8].Visible = false;
       gvr.Cells[9].Visible = false;  
 } 

ここからハンドラーを実装しようとしましたが、インデックス引数が与えられないため、チェックボックスがチェックされた行をプログラムが判断できません。

4

3 に答える 3

1
   TableCell cell = new TableCell();
   CheckBox box = new CheckBox();
   box.Check += new EventHandler(Checked_Changed);
   cell.Controls.Add(box);
   gvr.Cells.Add(cell);

すみません、もう車で家に帰ろうとしているので、簡単な回答です。box."event" ... の後にイベントを修正する必要があるかもしれません。

于 2013-06-03T14:14:08.180 に答える
1

あなたはこのように行くべきです:

まず、チェックボックスを生成するとき

       CheckBox box = new CheckBox();
       box.AutoPostBack=true;

チェックボックスにIDを次のように指定します

       box.ID=Convert.toString(Session["Count"]);

セッションでページが読み込まれるときに「カウント」を初期化します。また、新しいチェックボックスを追加するたびに「カウント」を増やします。

次に、動的チェック ボックスのイベント ハンドラーを次のように定義します。

       box.CheckedChange += MyHandler;

MyHandler を定義します

       protected void MyHandler(object sender, EventArgs e)
        {
             //Do some stuff
        }

これで、MyHandler 内でイベントが発生したチェックボックスの ID を取得できます。これは実際には行番号になります。

          CheckBox cb = (CheckBox)sender;
          string id = cb.ID;
于 2013-06-03T14:31:35.090 に答える
1
   protected void Page_Load(object sender, EventArgs e)
        {
            List<string> names = new List<string>();
            names.Add("Jhonatas");

            this.GridView1.DataSource = names;
            this.GridView1.DataBind();

            foreach (GridViewRow gvr in GridView1.Rows)
            {
                //add checkbox for every row
                TableCell cell = new TableCell();
                CheckBox box = new CheckBox();
                box.AutoPostBack = true;
                box.ID = gvr.Cells[0].Text;

                box.CheckedChanged += new EventHandler(box_CheckedChanged);
                cell.Controls.Add(box);
                gvr.Cells.Add(cell);
            }
        }

        void box_CheckedChanged(object sender, EventArgs e)
        {
            string test = "ok";
        }
于 2013-06-03T14:18:12.533 に答える