VB.net 嵌套 GridView 未定义

问题描述 投票:0回答:1

我正在关注本教程

https://www.aspsnippets.com/Articles/308/ASPNet-Nested-GridViews-GridView-inside-GridView-with-Expand-and-Collapse-feature/

我的 aspx 文件如下所示:

<asp:GridView ID="dgvPickups" runat="server" AutoGenerateColumns="false" CssClass="Grid" DataKeyNames="PickupID" OnRowDataBound="PickupRowDataBound" >
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <img alt="" style="cursor: pointer" src="Content/plus.png" />
                                <img alt="" style="cursor: pointer; display: none" src="Content/minus.png" />
                                <asp:Panel ID="pnlProductLines" runat="server" Style="display: none" >
                                    <asp:GridView ID="dgvProductLines" runat="server" AutoGenerateColumns="false" CssClass="ChildGrid" EmptyDataText="No Product Records Found" >
                                        <Columns>
                                            <asp:HyperLinkField DataNavigateUrlFields="ProductLineID" DataNavigateUrlFormatString="ProductLine.aspx?ProductLineID={0}" Text="Edit" />
                                            <asp:BoundField DataField="SKU" HeaderText="SKU" />
                                            <asp:BoundField DataField="ProductDescription" HeaderText="Description" />
                                            <asp:BoundField DataField="NetWeight" HeaderText="Net Weight" />
                                            <asp:BoundField DataField="Volume" HeaderText="Volume" />
                                            <asp:BoundField DataField="ProductClass" HeaderText="Product Class" />
                                            <asp:BoundField DataField="Hazmat" HeaderText="Hazmat" />
                                            <asp:BoundField DataField="PackageCount" HeaderText="Package Count" />
                                            <asp:BoundField DataField="HandlingUnits" HeaderText="Handling Units" />
                                            <asp:BoundField DataField="Stackable" HeaderText="Stackable" />
                                            <asp:BoundField DataField="NMFCNumber" HeaderText="NMFC Number" />
                                            <asp:HyperLinkField DataNavigateUrlFields="ProductLineID" DataNavigateUrlFormatString="ProductLine.aspx?DeleteProductLineID={0}" Text="Delete" />
                                        </Columns>
                                    </asp:GridView>
                                </asp:Panel>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="CustomerName" HeaderText="Customer Name" />
                        <asp:BoundField DataField="Name" HeaderText="Ship To" />
                        <asp:BoundField DataField="ContactName" HeaderText="Contact Name" />
                        <asp:BoundField DataField="ContactPhone" HeaderText="Contact Phone" />
                        <asp:BoundField DataField="ContactEmail" HeaderText="Contact Email" />
                        <asp:BoundField DataField="AccountNumber" HeaderText="Account Number" />
                        <asp:BoundField DataField="Instructions" HeaderText="Instructions" />
                        <asp:HyperLinkField DataNavigateUrlFields="PickupID" DataNavigateUrlFormatString="DeliveriesPickups.aspx?AddProducts={0}" Text="Add Products" />
                        <asp:HyperLinkField DataNavigateUrlFields="PickupID" DataNavigateUrlFormatString="DeliveriesPickups.aspx?PickupID={0}" Text="Edit" />
                        <asp:HyperLinkField DataNavigateUrlFields="PickupID" DataNavigateUrlFormatString="DeliveriesPickups.aspx?DeletePickupID={0}" Text="Delete" />
                    </Columns>
                </asp:GridView>
                <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script type="text/javascript">
            $("[src*=plus]").on("click", function () {
                $(this).closest("tr").after("<tr><td></td><td class='products' colspan = '999'>" + $(this).closest("tr").find("[id*=Orders]").html() + "</td></tr>");
                $(this).closest("tr").find("[src*=minus]").show();
                $(this).hide();
            });
            $("[src*=minus]").on("click", function () {
                $(this).closest("tr").next().remove();
                $(this).closest("tr").find("[src*=plus]").show();
                $(this).hide();
            });
        </script>

OnRowDataBound 事件如下所示:

    Protected Sub PickupRowDataBound(sender As Object, e As GridViewRowEventArgs) Handles dgvPickups.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            Dim pickupId As Integer = dgvPickups.DataKeys(e.Row.RowIndex).Value
            Dim dgvProductLines As GridView = TryCast(e.Row.FindControl("dgvProductLines"), GridView)
            dgvProductLines.DataSource = clsProductLine.RetrieveDTByPickupID(pickupId)
            dgvProductLines.DataBind()

        End If
    End Sub

不幸的是,当我运行页面时,父 GridView 加载没有任何问题,但子 GridView 只显示“未定义”

enter image description here

任何帮助将不胜感激!

我尝试了几种不同的解决方案,当我单独加载每个 GridView 时,一切都按预期工作。

vb.net gridview
1个回答
0
投票

更改:$(this).closest("tr").after("" + $(this).closest("tr").find("[id*=Orders]").html() + "" );

$(this).closest("tr").after("" + $(this).closest("tr").find("[id*=ProductLiness]").html() + "");

我相信 dgvProductLines 是子 gridview。您的代码仍在寻找 gvOrders。

© www.soinside.com 2019 - 2025. All rights reserved.