1

我有一个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");
}
4

3 回答 3

2

代码看起来不错。
问题可能是您在页面加载时绑定了gridview。
在页面加载的以下部分尝试网格绑定

if(!Page.IsPostBack)
{
  //code to bind the gridview

}
于 2013-03-20T04:36:08.290 回答
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会更好,(看看为什么更好所以您的代码将是:

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");
}
于 2013-03-20T04:35:48.873 回答
0
if(!Page.IsPostBack)
{
  //
}

Postback 在 cs 文件中起着重要的作用。如果您在页面加载时清除值,您会将复选框的值设为空。你的代码很好。尝试这样做...

于 2013-03-20T05:13:52.437 回答