2013-09-25 118 views
1

我正試圖實現更新主題功能。當我想添加一個新主題時,它正在工作。但是,當我取消選中一個複選框(如果我想從程序中刪除現有的主題),那麼它不起作用。如何檢查asp.net中gridview中複選框列的狀態

我調試程序,它顯示未勾選的複選框也被選中。

enter image description here

例如:如果我未選中IT102,然後點擊更新按鈕,所有的3名受試者將被保存在數據庫中。

這是ASPX代碼

<asp:GridView ID="gridview_modules" runat="server" AutoGenerateColumns="False"   
    GridLines="None"> 
         <HeaderStyle Width="30%" /> 
         <RowStyle Width="30%" /> 
         <FooterStyle Width="30%" /> 

         <Columns> 
          <asp:TemplateField> 
          <ItemTemplate> 
           <asp:CheckBox runat="server" ID="checkbox_select" /> 
          </ItemTemplate> 
          </asp:TemplateField> 
          <asp:BoundField DataField="courseNo" HeaderStyle-Width="20%" 
           ItemStyle-Width="10%" FooterStyle-Width="10%" > 
          <FooterStyle Width="10%" /> 
          <HeaderStyle Width="20%" /> 
          <ItemStyle Width="10%" /> 
          </asp:BoundField> 
          <asp:BoundField DataField="title"/> 
         </Columns> 
        </asp:GridView> 

這是更新按鈕的代碼(內部foreach循環)內的Page_Load

System.Web.UI.WebControls.CheckBox chk =  (System.Web.UI.WebControls.CheckBox)rowItem.Cells[0].FindControl("checkbox_select"); 
     if (chk.Checked) 
     { 
      all++; //no of checked subjects when the button is clicked 
      if (con.saveCourseForProgram(SiteVariables.ProgramName, rowItem.Cells[1].Text.ToString(), year, sem, SiteVariables.Specialization)) 
      { 
       success++;//try to insert in the db 
      } 
      else 
      { 
       //subject that didn't save in the db goes to courseList 
       courseList.Add(rowItem.Cells[1].Text.ToString()); 

      } 
     } 

代碼段

if (!Page.IsPostBack) 
    { 


     SiteVariables.ProgramName = null; 
     SiteVariables.Year = null; 
     SiteVariables.Semester = null; 
     SiteVariables.Specialization = null; 


     if (radioAll.Checked) 
     { 
      SqlDataSource DataSource2 = new SqlDataSource(); 
      DataSource2.ID = "SqlDataSource2"; 
      this.Page.Controls.Add(DataSource2); 
      DataSource2.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["SEP_Project_NewConnectionString2"].ConnectionString; 
      DataSource2.SelectCommand = "SELECT courseNo,title from Course"; 
      gridview_modules.DataSource = DataSource2; 
      gridview_modules.DataBind(); 
     } 
    } 

這是怎麼了我第一次檢查複選框。這個代碼也在page_load.course裏面,是一個包含特定程序主題的列表。

for (int i = 0; i < courses.Count; i++) 
     { 

      String courseNo = courses[i].Trim(); 
      //System.Diagnostics.Debug.Print("Course No :"+courseNo+"\n"); 

      for (int j = 0; j < gridview_modules.Rows.Count; j++) 
      { 
       //System.Diagnostics.Debug.Print("Row Value = " + gridview_modules.Rows[j].Cells[1].ToString() + "List value = " + courseNo + "\n"); 
       if (gridview_modules.Rows[j].Cells[1].Text == courseNo) 
       { 
        var chk = (System.Web.UI.WebControls.CheckBox)(gridview_modules.Rows[j].Cells[0].FindControl("checkbox_select")); 
        chk.Checked = true; 
       } 
      } 
     } 

如何解決這一問題?

感謝

+0

你採取了checkboxfield類型的列或itemtemplate列嗎? –

+1

你能分享aspx和代碼嗎! –

+0

我使用了模板colmn – chathura

回答

5

如果你已經採取CheckBoxField字段類型列然後i'ld建議你採取網格

<asp:TemplateField> 
<ItemTemplate> 
<asp:CheckBox ID="chkSelect" runat="server" /> 
</ItemTemplate> 
</asp:TemplateField> 

一個ItemTemplate柱和獲取複選框從代碼背後的價值如下

foreach(GridViewRow gvrow in myGrid.Rows) 
{ 
CheckBox chk = (CheckBox)gvrow.FindControl("chkSelect"); 
if (chk.Checked) 
{ 
//your code here when checkbox is checked 
} 
else 
{ 
//else part 
} 
+0

我使用相同的代碼,但它仍然無法正常工作 – chathura

+0

您是否收到任何錯誤或是否調試了代碼?是否進入if塊? –

+0

我沒有得到任何錯誤。如果(chk.Checked)是真的(即使我沒有選中它)。但是,當我添加一個新主題時,它可以正常工作。 – chathura

相關問題