问题
I have two gridviews - one nested in the other - and I am trying to set the datasource of the child grid programmaticly, but am not sure how to reference it.
<telerik:RadGrid ID="RadGridResults" runat="server" AutoGenerateColumns="true" OnNeedDataSource="RadGridResults_NeedDataSource">
<MasterTableView>
<NestedViewTemplate>
<telerik:RadGrid ID="RadGridDetails" runat="server" AutoGenerateColumns="true">
</telerik:RadGrid>
</NestedViewTemplate>
</MasterTableView>
</telerik:RadGrid>
I have tried this:
RadGrid radGridDetails = RadGridResults.FindControl("RadGridDetails") as RadGrid;
radGridDetails.DataSource = myList.ToList();
But this returns a NullReferenceException.
Can someone please show how I can accomplish this?
回答1:
Just databind the collection directly:
<telerik:RadGrid ID="RadGridDetails" runat="server" AutoGenerateColumns="true"
DataSource='<%# Eval("myList") %>'>
</telerik:RadGrid>
回答2:
You can find any control inside a NestedViewTemplate
by getting the grid's GridNestedViewItem
. Here is how you reference the child grid programmatically:
var radGridDetails =
((RadGridResults.MasterTableView.Items[0].ChildItem as GridNestedViewItem)
.FindControl("RadGridDetails") as RadGrid);
I would still databind the grid as @Servy demonstrated, but for referencing the grid like you asked, the above code should work.
回答3:
object dataKeyValue = ((source as RadGrid).NamingContainer as DataItem).GetDataKeyValue("ID");
//use the dataKeyValue to fetch the correct Employee object
来源:https://stackoverflow.com/questions/21389575/referencing-nested-control