2012-02-09 95 views
0

我使用下面的代碼,但它不工作..如果我選擇標題複選框,然後所有其他複選框應該選擇,以及如何獲得特定行ID,如果複選框被選中。如果選中標題複選框,那麼所有其他複選框的應在網格視圖中檢查

protected void headerLevelCheckBox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox headerChkBox = ((CheckBox)gvApproach.HeaderRow.FindControl("headerLevelCheckBox")); 

    if (headerChkBox.Checked == true) 
    { 
     foreach(GridViewRow gvRow in gvApproach.Rows) 
     { 
      CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox")); 

      rowChkBox.Checked = true;//((CheckBox)sender).Checked;  
     } 
    } 
    else 
    { 
     foreach (GridViewRow gvRow in gvApproach.Rows) 
     { 
      CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox")); 
      rowChkBox.Checked = false; 
     } 
    }   
} 

我使用VS 2008,C#

不使用JavaScript ..

+0

的話題......你不需要'if'條件。 – Reniuz 2012-02-09 12:27:06

+0

我得到了答案..感謝你爲你的repley – ani 2012-02-10 11:03:51

回答

3

ASPX代碼。 ..並得到特定的行在網格視圖的ID我用labe控制作爲PhotoId(PK)

<asp:GridView ID="gvApproach" runat="server" CellPadding="4" AutoGenerateColumns="False" 
     GridLines="None"> 
<Columns> 
    <asp:TemplateField HeaderText="PhotoId" Visible="false"> 
    <ItemTemplate> 
    <asp:Label ID="lblPhotoId" runat="server" Text='<%#Eval("PhotoId") %>' Visible="false"></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 

<asp:TemplateField> 
     <HeaderTemplate> 
      <asp:CheckBox runat="server" ID="headerLevelCheckBox" AutoPostBack="true" oncheckedchanged="headerLevelCheckBox_CheckedChanged" />     
     </HeaderTemplate> 
     <ItemTemplate> 
      <asp:CheckBox runat="server" ID="rowLevelCheckBox" AutoPostBack="true"/> 
     </ItemTemplate> 
</asp:TemplateField>   
    </Columns> 

在後面的代碼

....

protected void headerLevelCheckBox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox headerChkBox = ((CheckBox)gvApproach.HeaderRow.FindControl("headerLevelCheckBox")); 

    if (headerChkBox.Checked == true) 
    { 
     foreach(GridViewRow gvRow in gvApproach.Rows) 
     { 
      CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox")); 

      rowChkBox.Checked = true;  
     } 
    } 
    else 
    { 
     foreach (GridViewRow gvRow in gvApproach.Rows) 
     { 
      CheckBox rowChkBox = ((CheckBox)gvRow.FindControl("rowLevelCheckBox")); 
      rowChkBox.Checked = false; 
     } 
    }   
} 
2

我建議你不這樣做,在服務器上,而要做到這在客戶端上,而不是。使用javascript。你有沒有jQuery出現在該頁面上(使用該庫會更容易)?也許本教程將幫助:http://www.4guysfromrolla.com/articles/120810-1.aspx

0

更具體地講,你應該使用類似

headerChkBox的onclick = 「changeCheckboxes(本)」

function changeCheckboxex(mainCheck) 
{ 
    $(yourDivContainer).children("INPUT[type='checkbox']").attr('checked', yourValue); 
} 

希望它可以幫助

0

如果你想使用JavaScript來做到這一點,

您應該使用拿着記錄IDS複選框的工具提示屬性。 例如:

<asp:CheckBox ID="rowLevelCheckBox" runat="server" ToolTip='<%#Eval("ID")%>' /> 

然後,你應該使用JavaScript代碼頭的時候點擊複選框。

<script type="text/javascript"> 
    function SelectAll(element) { 
     if ($(element).attr("checked")) { 
      $("input[type=checkbox]").attr("checked", "true"); 
     } 
     else { 
      $("input[type=checkbox]").attr("checked", ""); 
     } 
    } 
</script> 

<HeaderTemplate> 
<div style="text-align: center; width: 100px; margin: auto"> 
<input type="checkbox" name="SelectAllCheckBox" onclick="SelectAll(this)">Select All</div> 
</HeaderTemplate> 

終於,在代碼後面。

你想獲得選定的ID,你可以使用這段代碼。

public List<string> GetAllSelectedIds() 
{ 
    List<string> selectedIds= new List<string>(); 
    for (int i = 0; i < grid.Rows.Count; i++) 
    { 
     GridViewRow row = grid.Rows[i]; 
     if (((CheckBox)row.FindControl("rowLevelCheckBox")).Checked) 
     { 
      string rowLevelCheckBoxStr = ((CheckBox)row.FindControl("rowLevelCheckBox")).ToolTip; 
      selectedIds.Add(rowLevelCheckBoxStr); 
     } 
    } 
    return selectedIds; 
} 
相關問題