2013-09-25 64 views
1

我已經嘗試創建附加到按鈕的事件以遍歷網格視圖的每一行,以將選中的值更改爲等於true。一旦我點擊這個按鈕,它如何使它標記每一件事情是真的?如何設置一個按鈕單擊每行中的複選框

這是代碼我已經開始用:

foreach (GridViewRow row in GridView1.Rows) 
{ 
    //I get stuck at this part 
    row.Cells[9].FindControl("Overwrite") 
} 
+3

如果你關心性能,你應該可以通過使用javascript函數來避免回發。 –

回答

1

在你GridView標記,如果您使用的是TemplateField舉行CheckBox控制,那麼你可以寫容易FindControl代碼實際定位TextBox控制,像這樣:

<asp:GridView ID="GridView1" runat="server" Visible="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="Action Item"> 
      <ItemTemplate> 
       <asp:CheckBox ID="Overwrite" runat="server"></asp:CheckBox> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

現在,在您的代碼隱藏,你可以這樣做:

foreach (GridViewRow row in GridView1.Rows) 
{ 
    // Only check data rows, ignoring header or footer rows 
    if (row.RowType == DataControlRowType.DataRow) 
    { 
     CheckBox b = row.FindControl("Overwrite") as CheckBox; 

     if(b != null) 
     { 
      b.Checked = true; 
     } 
    } 
} 

注意:您不需要Cells指數了,因爲FindControl可以搜索整個排找了一個名爲Overwrite控制。

+0

你不需要'b.Checked = true;'附近的括號。 –

+0

@JoeTyman - 是的,從技術上說你是對的,但是如果'if'塊中有多行,那麼你確實需要它們,並且我的'if'塊中幾乎總是有一個以上的語句,所以它是一個習慣。 :-) –

+0

我知道,我個人喜歡儘可能地在一條線上,儘管它在80列以下。 –

2
foreach (GridViewRow row in GridView1.Rows) 
{ 
    CheckBox b = row.Cells[9].FindControl("Overwrite") as CheckBox; 
    b.Checked = true; 
} 
相關問題