C# 使用Javascript隐藏Gridview

C# 使用Javascript隐藏Gridview,c#,javascript,asp.net,C#,Javascript,Asp.net,我在使用Javascript隐藏Gridview的行时遇到了一些问题 我的Js函数是 <script type="text/javascript"> function HideRows(Gdview) { rows = document.getElementById(Gdview).rows; for (var i = 0; i < rows.length; i++) { if

我在使用Javascript隐藏Gridview的行时遇到了一些问题

我的Js函数是

 <script type="text/javascript">
        function HideRows(Gdview) {

            rows = document.getElementById(Gdview).rows;
            for (var i = 0; i < rows.length; i++) {
                if (rows[i].cells[0].type == "checkbox") {

                    if (rows[i].cells[0].childNodes[0].checked) {

                        rows[i].style.display = "none";
                    }

                }
            }


        }
    </script>
第二个问题与第一个问题相同:

在这里,我尝试使用相应的链接按钮选择和取消选择gridview中的所有复选框…请参阅我的标记和JS:

<script type="text/javascript">
        function SelectAll(b) {

            var grid = document.getElementById("<%= Gdview.ClientID %>");
            var cell;
            if (grid.rows.length > 0) {

                for (var i = 0; i < grid.rows.length; i++) {


                    cell = grid.rows[i].cells[0];
                    if (cell.childNodes[0].type == "checkbox")
                        cell.childNodes[0].checked = b; 

                }
            }

        }
    </script>


<asp:GridView ID="Gdview" runat="server" AutoGenerateColumns="False" 
onrowdatabound="Gdview_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="Chk" runat="server" />
</ItemTemplate>
 </asp:TemplateField>
<asp:BoundField HeaderText="SNO" DataField="SerialNo" />
<asp:BoundField HeaderText="Organization" DataField="Organization" />
<asp:BoundField DataField="Origin" HeaderText="Origin"/>
<asp:BoundField DataField="Location" HeaderText="Location" />
<asp:BoundField DataField="Established" HeaderText="Established"/>
<asp:TemplateField>
<ItemTemplate>
 </ItemTemplate>
</asp:TemplateField>
</Columns>
 </asp:GridView>
<asp:LinkButton ID="lnkChekall" runat="server" Text="Chekall"></asp:LinkButton>
<asp:LinkButton ID="lnkUncheck" runat="server" Text="UnCheckAll"></asp:LinkButton>

这不起作用,伙计们,请帮我解决Java脚本的问题…

服务器控件的客户端Id与您分配的Id不同,请尝试:

document.getElementById("<%= Gdview .ClientID %>")
document.getElementById(“”)
完整代码:

//dont pass as parameter
function HideRows() {

        rows = document.getElementById("<%= Gdview.ClientID %>").rows;
        for (var i = 0; i < rows.length; i++) {
            if (rows[i].cells[0].type == "checkbox") {

                if (rows[i].cells[0].childNodes[0].checked) {

                    rows[i].style.display = "none";
                }

            }
        }
    }
//不要作为参数传递
函数HideRows(){
行=document.getElementById(“”)行;
对于(变量i=0;i
编辑3

在你的第二个问题中,我发现有几个问题:

  • 不应在RowDataBound中添加属性。它会增加 属性,而不是仅一次
  • 你的javascript是错误的

  • 您应该将布尔值true/false传递给javascript函数,而不是 绳子

  • 要使其正常工作,请在加载页面添加属性:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //PopulateGridView
            PopulateGrid();
        }
        lnkChekall.Attributes.Add("onclick", "javascript:SelectAll(true)");
        lnkUncheck.Attributes.Add("onclick", "javascript:SelectAll(false )");
    
    }
    
    并将您的javascript更改为:

    <script type="text/javascript">
        function SelectAll(b) {
    
            var grid = document.getElementById("<%= Gdview.ClientID %>");
            var cell;
            if (grid.rows.length > 0) {
    
                for (var i = 0; i < grid.rows.length; i++) {
                    cell = grid.rows[i].getElementsByTagName("input");
                    if (cell.length > 0) {
                        cell[0].checked = b;
                    }
                }
            }
        }
    </script>
    
    页面中的函数应如下所示:

    <script type="text/javascript" >
        function HideRows(Gdview) {
            var rows = document.getElementById(Gdview).rows;
    
            for( var i=0; i < rows.length; i++ ) {
                var inputs = rows[i].getElementsByTagName("input");
                if (inputs.length > 0 && inputs[0].checked) {
                            rows[i].style.display = "none";
                }       
            }
        }
    </script>
    

    在Codebehind?我必须这样打电话??添加(“onclick”、“HideRows()”;如果出现任何错误,请尝试删除引号,如
    getElementById()
    ,前提是您明确知道gridview的id。然后您可以像这样引用它:document.getElementById(Gdview);没有得到任何错误,,,我也厌倦了引号,,,我怎么知道我的JS函数工作正常??在Codebehind中调用JS函数的方法正确吗???这很好,它起作用了,,,但是使用JAvascript函数有什么方法可以做到这一点吗??我的意思是我想隐藏在点击按钮后被选中的行@user3035687-是的,您可以在js中完成。请查看编辑。但是为什么我不能在按钮单击中调用JS…我尝试使用linkbutton alsoo仍然没有实现功能..我尝试了另一个示例alsoo..@user3035687-是的,你可以。编辑2显示了如何在按钮单击中调用它。您必须添加'Page.ClientScript.RegisterStartupScript(GetType(),“HideRows”,“HideRows(“+GridView1.ClientID+”);“,true);`在按钮单击方法中。不要忘记使用此处显示的代码更改
    HideRows()
    方法。
    <script type="text/javascript">
        function SelectAll(b) {
    
            var grid = document.getElementById("<%= Gdview.ClientID %>");
            var cell;
            if (grid.rows.length > 0) {
    
                for (var i = 0; i < grid.rows.length; i++) {
                    cell = grid.rows[i].getElementsByTagName("input");
                    if (cell.length > 0) {
                        cell[0].checked = b;
                    }
                }
            }
        }
    </script>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
                <Columns>
                    <asp:TemplateField HeaderText="CheckBox 1">
                        <ItemTemplate>
                           <asp:CheckBox ID="chk1" Text="CheckBox 1" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CheckBox 2">
                        <ItemTemplate>                        
                           <asp:CheckBox ID="chk2" Text="CheckBox 2" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CheckBox 3">
                        <ItemTemplate>                        
                           <asp:CheckBox ID="chk3" Text="CheckBox 3" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CheckBox 4">
                        <ItemTemplate>                        
                           <asp:CheckBox ID="chk4" Text="CheckBox 4" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="CheckBox 5">
                        <ItemTemplate>                        
                           <asp:CheckBox ID="chk5" Text="CheckBox 5" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Row">
                        <ItemTemplate>
                            <%#Container.DataItem %>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <asp:Button ID="Btn" runat="server" Text="Button" OnClick="Button1_Click" />
        </div>
        </form>
    </body>
    </html>
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Test Data
            var lst = new List<string>() { "Row 1", "Row 2", "Row 3" };
            GridView1.DataSource = lst;
            GridView1.DataBind();
        }
    
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in GridView1.Rows)
        {
            var chk = row.FindControl("chk1") as CheckBox;
            if (chk != null && chk.Checked)
            {
                row.Attributes.Add("style", "display:none");
            }
        }
    }
    
       <asp:Button ID="Btn" runat="server" Text="Button" OnClick="Button1_Click" />
    
    <script type="text/javascript" >
        function HideRows(Gdview) {
            var rows = document.getElementById(Gdview).rows;
    
            for( var i=0; i < rows.length; i++ ) {
                var inputs = rows[i].getElementsByTagName("input");
                if (inputs.length > 0 && inputs[0].checked) {
                            rows[i].style.display = "none";
                }       
            }
        }
    </script>
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        //Your other code goes here
        //
        Page.ClientScript.RegisterStartupScript(GetType(), "HideRows", "HideRows('" + GridView1.ClientID + "');", true);
    }