checkd_change gridviewrow中以编程方式生成的复选框的事件

本文关键字:方式生 复选框 事件 编程 change gridviewrow checkd | 更新日期: 2023-09-27 18:16:54

我有一个保存用户数据的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;  
 } 

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

checkd_change gridviewrow中以编程方式生成的复选框的事件

   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";
        }
   TableCell cell = new TableCell();
   CheckBox box = new CheckBox();
   box.Check += new EventHandler(Checked_Changed);
   cell.Controls.Add(box);
   gvr.Cells.Add(cell);
对不起,我已经准备开车回家了,所以这只是一个快速的回答。也许你得把后面的事件更正一下。"事件"…

你应该这样做:

首先当你生成复选框 时
       CheckBox box = new CheckBox();
       box.AutoPostBack=true;

为复选框提供一个id

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

在会话中加载页面时初始化"Count"。每次添加一个新的复选框时,也增加"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;