在GridView Row中检查以编程方式生成的Checkbox的Change Event

时间:2013-06-03 14:08:54

标签: c# asp.net gridview checkbox oncheckedchanged

我有GridView来保存用户数据。调用Page_Load方法后,我使用DataTable获取数据,然后将其绑定到GridView。在每一行的末尾,我添加了CheckBox。该CB用作用户想要编辑的实体的指针。

我的问题是CheckBoxes的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;  
 } 

我已经尝试过从这里实现处理程序,但它没有给我索引参数,因此程序无法确定复选框在哪行中被检查。

3 个答案:

答案 0 :(得分:1)

   TableCell cell = new TableCell();
   CheckBox box = new CheckBox();
   box.Check += new EventHandler(Checked_Changed);
   cell.Controls.Add(box);
   gvr.Cells.Add(cell);
抱歉,我已经准备开车回家,所以它只是一个快速的答案。 mabye你必须在框后纠正这个事件。" event" ...

答案 1 :(得分: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";
        }

答案 2 :(得分: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;