2013-03-20 141 views
1

我有一個gridview,我在每行中使用複選框。我試圖訪問每一行的複選框,並試圖找出哪些複選框已checked.buut當我嘗試運行下面的code.the條件總是假的,內部如果條件是從來沒有達到code.kindly提前幫助我。訪問gridview中選中的複選框

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"); 
} 

回答

2

的代碼看起來不錯。
問題可能是你在頁面加載時綁定了gridview。
嘗試電網頁面加載的以下部分結合

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

} 
+0

haan shekhar那是原來的問題。謝謝男人 – Robin 2013-03-20 05:29:54

+0

@Robin不客氣 – 2013-03-20 05:56:21

0

我只能猜測你綁定你的每頁加載gridview沒有檢查回發。這會導致複選框失去當前狀態。所以,你在哪裏分配數據源到GridView,檢查回發,如:

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"); 
} 
0
if(!Page.IsPostBack) 
{ 
    // 
} 

回傳起着CS文件重要作用。如果您在頁面加載時清除值,則您將選中空值。 你的代碼很好。 只是試圖做到這一點...