我有一个父数据列表(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;">• <%#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")%>' />
答案 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;
}
}
}
并使用任何隐藏字段中的值。