如果选中了标题复选框,则应在网格视图中选中所有其他复选框

时间:2012-02-09 12:22:58

标签: c# asp.net gridview checkbox

我使用下面的代码,但它不起作用..如果我选择标题复选框,那么所有其他复选框应该选择以及如何获取特定的行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 ..

4 个答案:

答案 0 :(得分:3)

aspx代码...并获取特定ROW IN GRID VIEW的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;
        }
    }        
}

答案 1 :(得分:2)

我建议您不要在服务器上执行此操作,而是在客户端上执行此操作。使用javascript。你在那个页面上有jQuery(这个库会更容易)吗?也许本教程将有所帮助:http://www.4guysfromrolla.com/articles/120810-1.aspx

答案 2 :(得分:0)

更具体地说,你应该使用像

这样的东西

headerChkBox onclick =“changeCheckboxes(this)”

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

希望有所帮助

答案 3 :(得分:0)

如果你想使用javascript,

您应该使用checkBox的工具提示属性来保存记录的ID。 例如:

<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>

最后,在Code Behind。

您是否想要选择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;
}