ASP.NET - 嵌套DataList,在子DataList的隐藏字段中存储来自Parent的值

时间:2013-10-08 23:28:56

标签: asp.net

我有一个父数据列表(DataList1)和一个子数据列表(childList)。有没有办法将DataList1(父)中的字段Value(Company)存储在子DataList(childList)中的隐藏字段(hiddenCompanyFromParent)中,以便稍后处理它?<​​/ p>

请帮忙......

<asp:DataList BackColor="#ffffff" id="DataList1" DataSourceID="dsCompanyListPartialMatch"  runat="server" Width="80%" DataKeyField="Company1Word"
    UseAccessibleHeader="true"
    CssClass="books"
    HeaderStyle-CssClass="header"
    ItemStyle-CssClass="item"
    AlternatingItemStyle-CssClass="alternating" 
    GridLines="Both"
    CellPadding="0"
    CellSpacing="0" BorderColor="Black"
    ItemStyle-BorderColor="Black" BorderWidth="0"
     HorizontalAlign="Center"
    RepeatDirection="Vertical" 
    >                
    <HeaderTemplate>
        <table border="0" width="100%">
        <tr class="div_hover">
            <th style="width: 5%; border-right:1px solid black; border-spacing:0;  text-align:center; "></th>
            <th style="width: 5%; border-right:1px solid black; border-spacing:0;  text-align:center; ">Num</th>
            <th style="width: 70%; border-right:1px solid black; border-spacing:0;  text-align:center; ">Company Name</th>
            <th style="width: 10%; border-right:1px solid black; border-spacing:0;  text-align:center; ">Add?</th>
        </tr>
        </table>
    </HeaderTemplate>

    <ItemStyle BorderColor="black" Font-Size="Medium" />

    <ItemTemplate>
        <table border="0" width="100%">
        <tr class="div_hover">
            <td style="width: 5%; border-right:1px solid black; border-spacing:0;  text-align:center; ">        
            <asp:LinkButton>
                <asp:LinkButton ID="LinkButton2" runat="server" Text="+" CommandArgument='<%#Container.ItemIndex%>'
                OnCommand="LinkButton1_Command"  
                Font-Underline="false"       
                Height="25"      
                Font-Bold="true"                  
                ></asp:LinkButton>
            </td>
            <td style="width: 5%; border-right:1px solid black; border-spacing:0; text-align:right; padding-right:10px;"><%#Eval("Row")%></td>
            <td style="width: 70%"><asp:Literal ID="ltlCompany" runat="server" Text='<%#Eval("Company")%>' /> </td>

            <asp:Label ID="lblRow" Visible="False" runat="Server" Text='<%# DataBinder.Eval(Container.DataItem, "Row") %>' />
        </tr>    
        </table>      
            <asp:Panel ID="pnlChildView" runat="server" style="padding-left:200px;">
                <asp:DataList ID="childList" runat="server" Width="100%">
                   <ItemTemplate>
                       <div  class="div_hover">
                        <table class="table1" width="80%">
                       <tr>
                          <td style="width: 60%; border-right:0px solid black; border-spacing:0;">&#8226; <%#Eval("CompanyName")%></td>
                           <td style="width: 20%;text-align:right; "><a href="/Apps/ERP/Other/CompanyInfo.asp?CompanyID=<%#Eval("CompanyID")%>" ><%#Eval("CompanyID")%></a></td> 

                           <td style="width: 20%;text-align:right;"><asp:CheckBox id="chkChildCompany" runat="server" value="123Test"
                                AutoPostBack="true"
                               OnCheckedChanged="chkChildCompany_CheckedChanged" CustomAttribute='<%#Eval("CompanyID") %>' /></td>
                           <asp:Label ID="hidden" Visible="True" runat="Server" Text='<%# DataBinder.Eval(Container.DataItem, "CompanyID") %>' /> 
                           <asp:HiddenField ID="hiddenCompanyFromParent" runat="server" Value='<%#Eval("Company FROM PARENT DATALIST1") %>' />                    
                       </tr>
                        </table>
                        </div>
                   </ItemTemplate>
               </asp:DataList>
           </asp:Panel>
    </ItemTemplate>

     <FooterTemplate>
    </FooterTemplate>                
</asp:DataList>

我在下面尝试使用此代码,但它也无效。

<asp:HiddenField ID="hiddenCompanyParent" runat="server" value='<%# DataBinder.Eval(Container.NamingContainer.NamingContainer, "DataItem.Company")%>' /> 

1 个答案:

答案 0 :(得分:1)

您的隐藏字段位于DataList内部 - &gt; Panel - &gt; Child DataList。在这种情况下,你必须深入挖掘:

<asp:HiddenField ID="hiddenCompanyFromParent" runat="server" Value='<%# DataBinder.Eval(Container.Parent.Parent.Parent, "DataItem.Company")%> ' /> 

编辑:您正在链接按钮的单击事件中重新绑定子DataList,因此在回发后父数据列表的数据不可用。你可以做的一件事,在孩子Datalist旁边添加一个隐藏的字段。我在这里添加了面板:

 <asp:Panel ID="pnlChildView" runat="server" style="padding-left:200px;">
      <asp:HiddenField ID="hdnCompany" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Company")%> ' /> 

现在在代码中,您可以找到隐藏字段的值并使用它。甚至您可以将此值分配给子DataList中的隐藏字段:

protected void childList_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        HiddenField hdnCompany = (HiddenField)e.Item.NamingContainer.Parent.FindControl("hdnCompany");
        HiddenField hdnChildCompany = (HiddenField)e.Item.FindControl("hiddenCompanyFromParent");

        if (hdnCompany != null && hdnChildCompany != null)
        {
            hdnChildCompany.Value = hdnCompany.Value;
        }
    }
}

并使用任何隐藏字段中的值。