我有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;
}
我已经尝试过从这里实现处理程序,但它没有给我索引参数,因此程序无法确定复选框在哪行中被检查。
答案 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;