访问gridview中的选定复选框

时间:2013-03-20 04:21:23

标签: asp.net gridview

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

3 个答案:

答案 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文件中扮演重要角色。如果要在页面加载时清除值,则将使复选框的值为空。 你的代码很好。 试着这样做......