Referencing nested control

2019-01-29 06:56发布

问题:

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