在同一行中选中复选框时,选中datagrid-row中的All all复选框

时间:2011-07-21 06:49:35

标签: c# javascript asp.net

我正在开发一个网页,用于更改Project.Say中所有模块的子管理员的权限(添加/查看/删除/编辑/全部),共有5个模块。我已经在datagrid中为每个模块加载了当前权限(在datagrid中有5行(模块),对于该模块,在复选框中有5列权限)。我需要这样的功能,当我选中'ALL'复选框时,对于那个(模块),应选中Add,View,Edit,Delete的其他复选框,当我取消选中'ALL'复选框时,应该取消选中其他复选框。 任何解决方案接受javascript或任何事件。 我尝试使用checkedchanged事件,但它检查/取消选中整个数据网格的所有复选框,而不是该模块(行)。在checkedchanged事件中,我写了这段代码..

foreach (DataGridItem dgitem in dg_rights.Items)
            {
                CheckBox chkall = (CheckBox)dgitem.FindControl("chk_all");
                CheckBox chkadd = (CheckBox)dgitem.FindControl("chk_add");
                CheckBox chkedit = (CheckBox)dgitem.FindControl("chk_edit");
                CheckBox chkview = (CheckBox)dgitem.FindControl("chk_view");
                CheckBox chkdelete = (CheckBox)dgitem.FindControl("chk_delete");
                if (chkall.Checked)
                {
                    chkadd.Checked = true;
                    chkedit.Checked = chkview.Checked = chkedit.Checked = chkdelete.Checked = true;
                }
                else
                {
                    chkadd.Checked = false;
                    chkedit.Checked = chkview.Checked = chkedit.Checked = chkdelete.Checked = false;
                }
            }

看起来像是遗漏了一些基本的东西或犯了错误。 任何的想法。 谢谢 阿尼什

2 个答案:

答案 0 :(得分:0)

你可以这个jQuery:

$('#<%= YourGrid.ClientID %> input[id$=_chkAll]').click(
    function () {
        var all_checked = $(this).attr('checked') == 'checked';
        $(this).parent().parent().find('input').each(
            function (i,o) {
                o.checked = all_checked;
            }
        )
    }
)

http://jsfiddle.net/4u6gw/

对于ASP.NET服务器端解决方案,您必须这样做:

  • 将chkall复选框设置为autopostback
  • 挂钩到ItemsGrid_Command(Object sender,DataGridCommandEventArgs e)并使用e获取数据行和.FindControl以获取其他复选框

答案 1 :(得分:0)

我在'onclick'上为chk_all复选框调用了'this'参数的函数abcd,我最终得到了这个和它的工作原理。这里chk_是以chk_n开头的所有复选框的id都将被检查。

function abcd(checkbox) {
            var cba = $("#" + checkbox.id);
            if (cba.is(':checked')) {
                //alert("check all")
                var cb = $("#" + checkbox.id);
                var td = cb.parent("td");
                var tr = td.parent("tr");
                tr.children().children("input:checkbox[id*=chk_]").attr('checked', cb.attr('checked'));
            }
            else {
                //alert("unchecked");
                var cb = $("#" + checkbox.id);
                var td = cb.parent("td");
                var tr = td.parent("tr");
                tr.children().children("input:checkbox[id*=chk_]").removeAttr('checked');
            }
        }

感谢。