Reputation: 171
I have a Parent datalist (DataList1) and a child datalist (childList). Is there a way to store the field Value (Company) from DataList1 (parent) in the hidden field (hiddenCompanyFromParent) inside the child DataList (childList), so I can process it later?
Please help....
<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>
I try this code below, but it is not working either.
<asp:HiddenField ID="hiddenCompanyParent" runat="server" value='<%# DataBinder.Eval(Container.NamingContainer.NamingContainer, "DataItem.Company")%>' />
Upvotes: 1
Views: 2274
Reputation: 7943
Your hidden field is deep inside DataList-->Panel-->Child DataList. In this case you have to dig deeper:
<asp:HiddenField ID="hiddenCompanyFromParent" runat="server" Value='<%# DataBinder.Eval(Container.Parent.Parent.Parent, "DataItem.Company")%> ' />
EDIT: You are rebinding the child DataList in link button's click event, so the parent datalist's data is not available after postback. One thing you can do, add a hidden field out side the child Datalist. Here I am adding inside the panel:
<asp:Panel ID="pnlChildView" runat="server" style="padding-left:200px;">
<asp:HiddenField ID="hdnCompany" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "Company")%> ' />
Now in the code you can find the hidden field's value and use it. Even you can assign this value to the hidden field inside child 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;
}
}
}
And use the value from any of the hidden field.
Upvotes: 1