我有一个gridview,其中我在每行使用复选框。我试图访问每一行的复选框,并试图找出哪些复选框已被检查。当我尝试运行下面的代码时,条件总是为假,并且代码永远不会达到内部if条件。请提前帮助我。
protected void btn_3id_Click(object sender, EventArgs e)
{
string str = "";
string srr = "";
for (int i = 0; i < GridView1.Rows.Count;i++ )
{
CheckBox chk = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (chk.Checked==true)
{
if (str == "")
{
str = GridView1.Rows[i].Cells[0].Text.ToString();
}
else
{
srr = str + "," + GridView1.Rows[i].Cells[0].Text.ToString();
}
}
}
Session["Card_id"] = str;
Response.Redirect("ID.aspx");
}
答案 0 :(得分:2)
代码看起来很好 问题可能是您在页面加载时绑定了gridview 在页面加载的以下部分中尝试网格绑定
if(!Page.IsPostBack)
{
//code to bind the gridview
}
答案 1 :(得分:0)
我只能猜测你是否在每个页面加载时绑定了gridview
而没有检查PostBack。这导致复选框松开其当前状态。因此,在将DataSource分配给Gridview的位置,请检查PostBack,如:
if(!Page.IsPostBack)
{
GridView1.DataSource = yourDataSource;
GridView1.DataBind();
}
您也可以像检查一样对代码进行一些小改进:
if(chk.Checked == true)
可以替换为:
if(chk.Checked) //Since it returns a bool value.
您可以省略多个字符串变量以进行连接。如果您使用StringBuilder,(请参阅why it is better),那么您的代码就会更好:
protected void btn_3id_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < GridView1.Rows.Count;i++ )
{
CheckBox chk = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
if (chk.Checked==true)
{
sb.Append() GridView1.Rows[i].Cells[0].Text.ToString();
}
}
Session["Card_id"] = sb.ToString();
Response.Redirect("ID.aspx");
}
答案 2 :(得分:0)
if(!Page.IsPostBack)
{
//
}
回发在cs文件中扮演重要角色。如果要在页面加载时清除值,则将使复选框的值为空。 你的代码很好。 试着这样做......