C# 在asp.net中回发后,gridview中动态添加的控件(复选框)将消失
我在“网格视图”列中添加了一个“动态创建”复选框,但它在单击按钮时给了我空值 返回后,复选框将消失 这是我的密码C# 在asp.net中回发后,gridview中动态添加的控件(复选框)将消失,c#,asp.net,gridview,postback,C#,Asp.net,Gridview,Postback,我在“网格视图”列中添加了一个“动态创建”复选框,但它在单击按钮时给了我空值 返回后,复选框将消失 这是我的密码 protected void grdreport_RowDataBound(object sender, GridViewRowEventArgs e) { int temp = e.Row.Cells.Count; temp--; if (e.Row.RowType == DataControlRowType.DataRow) {
protected void grdreport_RowDataBound(object sender, GridViewRowEventArgs e)
{
int temp = e.Row.Cells.Count;
temp--;
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (temp >= 3)
{
strheadertext1 = grdreport.HeaderRow.Cells[3].Text;
CheckBox cb1 = new CheckBox();
cb1.Text = e.Row.Cells[3].Text;
e.Row.Cells[3].Controls.Add(cb1);
}
}
}
在我的按钮上,单击我检查复选框值是否选中的位置
foreach (GridViewRow item in grdreport.Rows)
{
if (item.RowType == DataControlRowType.DataRow)
{
CheckBox checkbox1 = (CheckBox)item.FindControl("cb1");
// cb1.Checked = true;
if (checkbox1.Checked)
{
}
}
}
为了在回发期间访问动态创建的控件的值,需要在
OnInit
方法中使用相同的ID重新创建控件。很少有情况下,这是必要的,或者可以证明您必须付出努力来实现这一点,特别是在涉及列表或网格的场景中
也就是说,您可以使用一些选项仅显示某些项目的复选框。一个想法是添加一个普通复选框列(或者对于更复杂的场景,添加一个模板列)。使用代码或CSS在不希望看到复选框的行中隐藏复选框。因此对象将在那里,但用户不会在隐藏的行中看到它。这通常比动态方法容易得多 为了在回发期间访问动态创建的控件的值,需要在
OnInit
方法中使用相同的ID重新创建控件。很少有情况下,这是必要的,或者可以证明您必须付出努力来实现这一点,特别是在涉及列表或网格的场景中
也就是说,您可以使用一些选项仅显示某些项目的复选框。一个想法是添加一个普通复选框列(或者对于更复杂的场景,添加一个模板列)。使用代码或CSS在不希望看到复选框的行中隐藏复选框。因此对象将在那里,但用户不会在隐藏的行中看到它。这通常比动态方法容易得多 使用动态控件时,需要在每次回发时重新绑定GridView数据。因此,通常您会使用IsPostBack检查并在其中绑定数据。但现在不要这样做
protected void Page_Load(object sender, EventArgs e)
{
//normally you would bind here
if (IsPostBack == false)
{
GridView1.DataSource = source;
GridView1.DataBind();
}
//but when using dynamic control inside a gridview, bind here
GridView1.DataSource = source;
GridView1.DataBind();
}
更新
您必须为动态控件指定一个ID。您正在查找cb1
,但从未将该ID指定给复选框
CheckBox cb1 = new CheckBox();
cb1.ID = "cb1";
使用动态控件时,需要在每次回发时重新绑定GridView数据。因此,通常您会使用IsPostBack检查并在其中绑定数据。但现在不要这样做
protected void Page_Load(object sender, EventArgs e)
{
//normally you would bind here
if (IsPostBack == false)
{
GridView1.DataSource = source;
GridView1.DataBind();
}
//but when using dynamic control inside a gridview, bind here
GridView1.DataSource = source;
GridView1.DataBind();
}
更新
您必须为动态控件指定一个ID。您正在查找cb1
,但从未将该ID指定给复选框
CheckBox cb1 = new CheckBox();
cb1.ID = "cb1";
仍然复选框有空值@vdwwdthanks@VDWWD其工作正常,但新问题出现在按钮上单击i获取行项目的值它总是在我选中第二行foreach的复选框时给出第一行值(grdreport.Rows中的GridViewRow){checkbox checkbox1=(checkbox)row.FindControl(“cb1”);checkbox1.Checked=true;如果(checkbox1.Checked){string itemname=row.Cells[0]。Text;string special=row.Cells[1]。Text;string qty=row.Cells[2]。Text;}}}}您正在循环所有行,因此,您必须确保获得正确的行。如何获得检查行@vdwwdstrill复选框的空值@vdwwdtanks@VDWWD其工作正常,但在按钮单击时出现新问题我获取行项目的值每当我选中第二行foreach的复选框(gridreport.Rows中的GridViewRow行)时,它总是给出第一行值{CheckBox checkbox1=(CheckBox)row.FindControl(“cb1”);checkbox1.Checked=true;if(checkbox1.Checked){string itemname=row.Cells[0]。Text;string special=row.Cells[1]。Text;string qty=row.Cells[2]。Text;}}'您正在循环所有行,因此必须确保获得正确的行。如何在@VDWWD获取该检查行