【问题标题】:Check Box to be selected row index manner in gridview复选框在gridview中被选中的行索引方式
【发布时间】:2015-06-18 07:30:47
【问题描述】:

我想在网格视图中以行索引方式选择复选框值,有人可以建议如何选择复选框吗?请在下面找到无法正常工作的代码。

        function Check_Click(spanChk) {
            {
                var IsChecked = spanChk.checked;

                var Chk = spanChk;

                Parent = document.getElementById('Gv1');

                var btn = document.getElementById('<%=btnsubmit.ClientID %>');

                var items = Parent.getElementsByTagName('input');
                var i = 0;
                var tot = 0;
                for (i = 0; i < items.length; i++) {
                    if (items[i].checked) {
                        tot = tot + 1;

                        if (tot > 2) {
                            alert('Cannot check more than 2 check boxes');
                            items[i].checked = false;
                            return;
                        }
                    }
                }

            }
        }

这是我的网格视图文件

         <asp:GridView ID="Gv1" runat="server" AutoGenerateColumns="False" OnRowDataBound="Gv1_RowDataBound">
        <Columns>
            <asp:BoundField DataField="datedif" HeaderText="Day/Hour" SortExpression="datedif" />
            <asp:TemplateField HeaderText="Hour1">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" Enabled='<%# Eval("hour1").ToString().Equals("False") %>' OnCheckedChanged="CheckBox1_CheckedChanged" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour2">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox2" runat="server" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox2" runat="server" Enabled='<%# Eval("hour2").ToString().Equals("False") %>' OnCheckedChanged="CheckBox6_CheckedChanged" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour3">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox3" runat="server" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox3" runat="server" Enabled='<%# Eval("hour3").ToString().Equals("False") %>' OnCheckedChanged="CheckBox3_CheckedChanged" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour4">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox4" runat="server" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox4" runat="server" Enabled='<%# Eval("hour4").ToString().Equals("False") %>' OnCheckedChanged="CheckBox4_CheckedChanged" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour5">
                <EditItemTemplate>
                    <asp:CheckBox ID="CheckBox5" runat="server" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox5" runat="server" Enabled='<%# Eval("hour5").ToString().Equals("False") %>' OnCheckedChanged="CheckBox5_CheckedChanged" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

【问题讨论】:

  • 您能否评论一下您想用这些行执行的代码行?
  • 那不是 C# 代码 Ravi。
  • 你能用jquery代替javascript吗?
  • 我正在为我的大学做课表管理。这是课表的最后一部分,条件是教职工每天不能预约该科目不超过2次,每周他可以参加12个科目只是在尝试这个 java 脚本。可以使用Javascript或Jquery

标签: javascript c# asp.net gridview


【解决方案1】:

如下图所示,从所有CheckBoxes中调用JavaScript函数,

<asp:GridView ID="Gv1" runat="server" AutoGenerateColumns="False" OnRowDataBound="Gv1_RowDataBound">
        <Columns>
            <asp:BoundField DataField="datedif" HeaderText="Day/Hour" SortExpression="datedif" />
            <asp:TemplateField HeaderText="Hour1">
                <EditItemTemplate>
                    <asp:CheckBox ID="chkColumn1" runat="server" onclick="Check_Click(this)" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkHour1" runat="server" Enabled='<%# Eval("hour1").ToString().Equals("False") %>'
                        OnCheckedChanged="CheckBox1_CheckedChanged" onclick="Check_Click(this)" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour2">
                <EditItemTemplate>
                    <asp:CheckBox ID="ChkColumn2" runat="server" onclick="Check_Click(this)" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkHour2" runat="server" Enabled='<%# Eval("hour2").ToString().Equals("False") %>'
                        OnCheckedChanged="CheckBox6_CheckedChanged" onclick="Check_Click(this)" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour3">
                <EditItemTemplate>
                    <asp:CheckBox ID="chkColumn3" runat="server" onclick="Check_Click(this)" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkHour3" runat="server" Enabled='<%# Eval("hour3").ToString().Equals("False") %>'
                        OnCheckedChanged="CheckBox3_CheckedChanged" onclick="Check_Click(this)" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour4">
                <EditItemTemplate>
                    <asp:CheckBox ID="chkColumn4" runat="server" onclick="Check_Click(this)" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkHour4" runat="server" Enabled='<%# Eval("hour4").ToString().Equals("False") %>'
                        OnCheckedChanged="CheckBox4_CheckedChanged" onclick="Check_Click(this)" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Hour5">
                <EditItemTemplate>
                    <asp:CheckBox ID="chkColumn5" runat="server" onclick="Check_Click(this)" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:CheckBox ID="chkHour5" runat="server" Enabled='<%# Eval("hour5").ToString().Equals("False") %>'
                        OnCheckedChanged="CheckBox5_CheckedChanged" onclick="Check_Click(this)" />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

并在JavaScript 中,验证选定的CheckBox 及其Row,然后验证选定的项目数。

     function IdExists(elements, id) {
        for (var i = 0; i < elements.length; i++) {
            if (elements[i].id.indexOf(id) > -1) {
                return true;
            }
        }
        return false;
    }

    function Check_Click(chkBx) {
        Parent = document.getElementById('<% =Gv1.ClientID %>');
        for (i = 0; i < Parent.rows.length; i++) {

            var row = Parent.rows[i];
            var items = row.getElementsByTagName('input');

            if (items.length > 0) {
                if (IdExists(items, chkBx.id)) {
                    var tot = 0;
                    for (j = 0; j < items.length; j++) {

                        if (items[j].type == 'checkbox' && items[j].checked) {

                            tot = tot + 1;

                            if (tot > 2) {
                                alert('Cannot check more than 2 check boxes');
                                chkBx.checked = false;
                                return;
                            }
                        }
                    }
                }
            }
        }
    }

【讨论】:

  • @RavintherM 那么您在GridView 中有其他CheckBoxes 吗?
  • 当我给出 onclick 函数时,它按列检查。如果我在 gridview 上给出那个 onclick 函数,它会按行检查,但是当我单击第一行中的一个复选框和另一个复选框时,** 中的问题在第二行显示警报消息的状态** 我现在应该做什么
  • @RavintherM 我已经更新了答案。我又添加了一个条件,验证了if Condition 中的ID (chkSelect)。为您的 CheckBox 尝试类似的操作。
  • 同样的事情正在发生,它是按列检查而不是按行检查
  • 我正在为我的大学做课表管理。这是课表的最后一部分,条件是教职工每天不能预约该科目不超过2次,每周他可以参加12个科目只是在尝试这个 java 脚本。可以使用Javascript或Jquery
【解决方案2】:

您需要在复选框中添加一个类名。那么你可以通过类名轻松获取所有复选框。

function Check_Click(spanChk) {
        {
            var IsChecked = spanChk.checked;

           var items = document.getElementsByClassName('myCheckBox');
            var i = 0;
            var tot = 0;
            for (i = 0; i < items.length; i++) {
                if (items[i].checked) {
                    tot = tot + 1;

                    if (tot > 2) {
                        alert('Cannot check more than 2 check boxes');
                        items[i].checked = false;
                        return;
                    }
                }
            }

        }
    }

更新:

您也可以使用以下代码获取所有复选框。

var Checkboxes =  document.querySelectorAll('input[type=checkbox]');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 2013-10-03
    • 2020-12-23
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多