C# 选中\u GridView行中程序生成复选框的更改事件
我有一个C# 选中\u GridView行中程序生成复选框的更改事件,c#,asp.net,gridview,checkbox,oncheckedchanged,C#,Asp.net,Gridview,Checkbox,Oncheckedchanged,我有一个GridView,它保存用户数据。调用Page\u Load方法时,我使用DataTable获取数据,然后将其绑定到GridView。在每行的末尾,我添加了一个复选框。此CB用作用户要编辑的实体的指针 我的问题是复选框的Check\u Changed事件。如果控件是以编程方式生成的,我不知道如何添加处理程序。我还需要行的索引(也可以使用字段值,但列标题和列本身是隐藏的) 我已经尝试从这里实现该处理程序,但它没有给我任何索引参数,因此程序无法确定选中复选框的行 TableCell c
GridView
,它保存用户数据。调用Page\u Load
方法时,我使用DataTable
获取数据,然后将其绑定到GridView
。在每行的末尾,我添加了一个复选框
。此CB用作用户要编辑的实体的指针
我的问题是复选框的Check\u Changed
事件。如果控件是以编程方式生成的,我不知道如何添加处理程序。我还需要行的索引(也可以使用字段值,但列标题和列本身是隐藏的)
我已经尝试从这里实现该处理程序,但它没有给我任何索引参数,因此程序无法确定选中复选框的行
TableCell cell = new TableCell();
CheckBox box = new CheckBox();
box.Check += new EventHandler(Checked_Changed);
cell.Controls.Add(box);
gvr.Cells.Add(cell);
对不起,我马上就要开车回家了,所以这只是一个快速的回答。
也许你必须在方框后更正事件。“事件”
对不起,我马上就要开车回家了,所以这只是一个快速的回答。
可能您必须更正框后的事件。“事件”…受保护的无效页面加载(对象发送方,事件参数e)
{
列表名称=新列表();
名称。添加(“Jhonatas”);
this.GridView1.DataSource=名称;
this.GridView1.DataBind();
foreach(GridView1.Rows中的GridViewRow gvr)
{
//为每行添加复选框
TableCell=新的TableCell();
复选框=新复选框();
box.AutoPostBack=true;
box.ID=gvr.Cells[0]。文本;
box.CheckedChanged+=新事件处理程序(box\u CheckedChanged);
单元格.控件.添加(框);
gvr.Cells.Add(单元格);
}
}
无效框\u CheckedChanged(对象发送方,事件参数e)
{
字符串测试=“确定”;
}
受保护的无效页面\u加载(对象发送方,事件参数e)
{
列表名称=新列表();
名称。添加(“Jhonatas”);
this.GridView1.DataSource=名称;
this.GridView1.DataBind();
foreach(GridView1.Rows中的GridViewRow gvr)
{
//为每行添加复选框
TableCell=新的TableCell();
复选框=新复选框();
box.AutoPostBack=true;
box.ID=gvr.Cells[0]。文本;
box.CheckedChanged+=新事件处理程序(box\u CheckedChanged);
单元格.控件.添加(框);
gvr.Cells.Add(单元格);
}
}
无效框\u CheckedChanged(对象发送方,事件参数e)
{
字符串测试=“确定”;
}
您应该这样做:
首先,在生成复选框时
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;
你应该走这条路: 首先,在生成复选框时
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;
我已经试过了,但是我没有得到复选框所在行的索引。我有多行,每一行都有一个复选框。如果一个复选框被选中,其他复选框应该被取消选中。我已经尝试过了,但是我没有得到复选框所在行的索引。我有多行,每一行都有一个复选框。如果一个被选中,其他的应该被选中。我如何在这里检查该行的索引?我需要得到这个,以便能够确定哪个复选框被选中,哪个不被选中…您的事件正在被激发?我如何在这里检查该行的索引?我需要得到这个,以便能够确定哪个复选框被选中,哪个不被选中…您的事件正在被激发?好的,当我这样做时,事件正在被激发,但我总是得到相同的ID“ctl00”…感谢稍加修改,我成功地使它工作。我刚刚添加了一个隐藏字段,其中包含数据集的ID。然后我只是用它来指代复选框。好的,当我这样做时,事件被触发,但我总是得到相同的ID“ctl00”…谢谢,经过一点修改,我成功地使它工作了。我刚刚添加了一个隐藏字段,其中包含数据集的ID。然后我用它来指代复选框。