如何从后面的代码中填充 RadGrid NestedViewTemplate?

How to fill RadGrid NestedViewTemplate from code behind?

遇到需要将 RadGrid 从首页移动到代码的情况。

以前是这样的:

<telerik:RadGrid id="rgBooks" runat="server"
    Height="300px"
    Skin="Office2007"     
    EnableViewState="true"
    AutoGenerateColumns="False" >
        <MasterTableView 
            EditMode="inplace"
            TableLayout="auto" 
            ClientDataKeyNames="BookID, BookName, Created, Modified, BookTypeName, BookTypeID"
            NoMasterRecordsText="No available books." >
            <HeaderStyle Font-Bold="true" Font-Size="Small" />
            <ItemStyle Font-Size="Small" Font-Names="Arial" HorizontalAlign="Left" Wrap="True" BackColor="White"/>
            <HeaderStyle Wrap="False" Width="99%" HorizontalAlign="Left"/>
            <AlternatingItemStyle Font-Size="Small" Font-Names="Arial" HorizontalAlign="Left" Wrap="True" BackColor="White"/>  
            <NestedViewTemplate>
                <table>
                    <tr>
                        <td>
                            BookType Type:
                        </td>
                        <td>
                            <asp:DropDownList runat="server" ID="ddlBookTypes" AutoPostBack="true" /> 
                        </td>
                    </tr>

                    ....
                    ....

            </NestedViewTemplate>
            <columns>
                <telerik:GridBoundColumn HeaderText="Book Name" HeaderStyle-Width="33%" ItemStyle-Width="33%" UniqueName="BookName" DataField="BookName" />
                <telerik:GridBoundColumn HeaderText="Created" HeaderStyle-Width="33%" ItemStyle-Width="33%" UniqueName="Created" DataField="Created" />
                <telerik:GridBoundColumn HeaderText="Modified" HeaderStyle-Width="33%" ItemStyle-Width="33%" UniqueName="Modified" DataField="Modified" />
            </columns>

            ....
            ....

</telerik:RadGrid> 

在代码中重新创建它如下所示:

Dim rgBooks As New RadGrid : With rgBooks
   .ID = "rgBooks"
   .Height = New Unit(300, UnitType.Pixel)
   .Skin = "Office2007"

   ....
   ....       

End With

Me.placeHolder.Controls.Add(rgBooks)

除了<NestedViewTemplate>,它工作正常。没有找到将我的值发送到那里的方法 (table),而且几乎没有关于如何发送的文档。 据我了解,它应该看起来像 rgBooks.MasterTableView.NestedViewTemplate.InstantiateIn( and here my data ) 但每次尝试向那里发送内容都以失败告终,并且 Object reference not set to an instance of an object.

除外

也尝试作为 LiteralControl 发送。

rgBooks.MasterTableView.Controls.Add(New LiteralControl("<NestedViewTemplate>"))
rgBooks.MasterTableView.Controls.Add(New LiteralControl("<table>"))
rgBooks.MasterTableView.Controls.Add(New LiteralControl("<tr>"))
....
....

没有解决。

我该如何正确填写代码 NestedViewTemplate(顺便说一句,它是 ITemplate)?

好的,了解它应该如何工作。

需要自定义 class

Public Class NestedTemplate
    Implements ITemplate

    Public Sub InstantiateIn(container As Control) Implements ITemplate.InstantiateIn

        container.Controls.Add(New LiteralControl("<table>"))
        container.Controls.Add(New LiteralControl("<tr>"))

        ....
        ....

        container.Controls.Add(New LiteralControl("</table>"))
    End Sub
End Class

然后

rgBooks.MasterTableView.NestedViewTemplate = new NestedTemplate

天哪,我在这件事上浪费了多少时间...