2014-02-06 88 views
1

我有一個gridview,在gridview的列中我有2個複選框與不同的ID 所以我做了一個foreach循環後,我點擊一個按鈕(更新按鈕)循環行,並檢查該特定行的複選框是否被選中,然後我想單擊按鈕後一起更新所有行循環GridView中的複選框,以檢查複選框的選中

我在Page_Load()中填充gridview,foreach循環根據但它不會進入我的If語句檢查複選框是否被選中

這是我的代碼:

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    int count = 0; 
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     count++; 
     if (((CheckBox)row.FindControl("showBbtn")).Checked & ((CheckBox)row.FindControl("showCbtn")).Checked) // if 2 buttons are checked show error popout 
     { 
      Response.Write(@"<script language='javascript'>alert('You can only select Yes or No')</script>"); 
     } 
     else 
     { 
      if (((CheckBox)row.FindControl("showCbtn")).Checked) // Won't enter 
      { 
       //Do something here. 
      } 
      if (((CheckBox)row.FindControl("showBbtn")).Checked) // Won't enter 
      { 
       // Do something here. 
      } 

     } 


    } 

    Response.Write(count); 
} 

這也是我如何填充我的GridView:

protected void Page_Load(object sender, EventArgs e) 
{ 
    BindQuestion(); // Foreach loop count is according to the number of rows 
    if (!Page.IsPostBack) 
    { 
     // BindQuestion(); // Can enter the if loop but the foreach loop count is only 1. 
    } 
} 

我的aspx:

<asp:TemplateField HeaderText="Display"> 
      <ItemTemplate> 
       <asp:CheckBox ID="showCbtn" runat="server" Text = "Yes" /> 
       <br /> 
       <asp:CheckBox ID="showBbtn" runat="server" Text = "No" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
+0

我認爲你應該只使用一個複選框。如果選中,則更新行,否則不行。 – mit

+0

我用2複選框,因爲我想他們選擇是或否,然後我會更新是或否進入特定記錄的數據庫,現在的問題是,它不會進入if語句,我想更新整個gridview – what

+1

如果你想最終用戶顯示是和否選項,用戶應該能夠選擇其中任何一個,那麼你可以使用單選按鈕。 – SpiderCode

回答

1

。在你的。如果條件問題。你給不正確&跡象,這應該是兩個& & sign.Replace

if (((CheckBox)row.FindControl("showBbtn")).Checked & ((CheckBox)row.FindControl("showCbtn")).Checked) 

if (((CheckBox)row.FindControl("showBbtn")).Checked && ((CheckBox)row.FindControl("showCbtn")).Checked) 

,並添加了BindQuestion()內的IsPostBack。

+0

我已經嘗試過了,它不會影響結果,它仍然是相同的,如果我把BindQuestion()放在ispostback中,foreach循環由於回發只會運行一次,它不會進入內部的2 IF循環else {}如果我把它放在ispostback – what

+0

的外側,如果我放入ispostback,它將進入IF循環但只運行一次,意味着我一次只能更新1行,而不是更新每一行一旦我點擊更新按鈕 – what

+0

嗨@Raghubar我認爲他的問題的解決方案是使用XML,我們可以在一個實例發送所有更新的值。你說什麼 ? – Sanjeev4evr

1

這可能會幫助你

foreach (GridViewRow gr in grdCreateDues.Rows) 
      { 
       CheckBox chkC = gr.FindControl("showCbtn") as CheckBox; 
       CheckBox chkB = gr.FindControl("showBbtn") as CheckBox; 

       GridViewRow Row = ((GridViewRow)chk.Parent.Parent); 

       if (chkC.Checked) 
       { 
        // update tblGridtable set xzy = @xyz 
       } 
       else if (chk.B.Checked) 
       { 
        // update tblGridtable set abc = @abc  
       } 

      } 
0

嘗試使用這樣的: -

CheckBox chbx = GridView1.HeaderRow.FindControl("CheckBox1") as CheckBox; 

if (chbx != null && chbx.Checked) 
{ 
Condition 
} 
0

這種方法也正在

var checkBox = (CheckBox)item.FindControl("ckbActive"); 
+2

避免僅用於代碼的答案。考慮提供解​​決方案的更詳細的解釋。 –