0

我有一个GridView保存用户数据的。调用方法时Page_Load,我使用 a 获取数据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
   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 回答
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
   TableCell cell = new TableCell();
   CheckBox box = new CheckBox();
   box.Check += new EventHandler(Checked_Changed);
   cell.Controls.Add(box);
   gvr.Cells.Add(cell);

对不起,我已经准备开车回家了,所以这只是一个快速的答案。也许你必须在框后更正事件。“事件”......

于 2013-06-03T14:14:08.180 回答