This is a migrated thread and some comments may be shown as answers.

Accessing child programatically - master/detail.

1 Answer 70 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Matthew
Top achievements
Rank 1
Matthew asked on 12 Mar 2012, 08:25 AM
I am trying to automatically expand to detail level the newly inserted master record (which works)
and then auto put the child into insert mode which I cant seem to get working.

It throws the 'index out of bounds' error on the :

  Dim tableView As GridTableView = DirectCast(item.ChildItem.NestedTableViews(0), GridTableView)
  tableView.IsItemInserted = True


Any advice appreciated.
Thanks in advance.

Snippet of code I am using below

<telerik:RadGrid ID="RadGrid1" OnPreRender="RadGrid1_PreRender" DataSourceID="SqlDataSource1" OnItemInserted="RadGrid1_ItemInserted"
            runat="server" AutoGenerateColumns="False" AllowSorting="True" AllowMultiRowSelection="False"
            AllowPaging="True" PageSize="10" GridLines="None" AllowAutomaticInserts="True"
            allowautomaticdeletes="true" AllowAutomaticUpdates="true">
            <PagerStyle Mode="NumericPages"></PagerStyle>
            <MasterTableView DataSourceID="SqlDataSource1" CommandItemDisplay="Top" DataKeyNames="custID" AllowMultiColumnSorting="True"
                            GroupLoadMode="Server">
                <NestedViewTemplate>
                    <asp:Panel runat="server" ID="InnerContainer" CssClass="viewWrap" Visible="true">
                        <telerik:RadTabStrip runat="server" ID="TabStip1" MultiPageID="Multipage1"
                            SelectedIndex="0">
                            <Tabs>
                                <telerik:RadTab runat="server" Text="Job Details" PageViewID="PageView1">
                                </telerik:RadTab>
                                <telerik:RadTab runat="server" Text="Scheduling" PageViewID="PageView2">
                                </telerik:RadTab>
 
                            </Tabs>
                        </telerik:RadTabStrip>
                        <telerik:RadMultiPage runat="server" ID="Multipage1" SelectedIndex="0" RenderSelectedPageOnly="false">
                            <telerik:RadPageView runat="server" ID="PageView1">
                                <asp:Label ID="Label1" Font-Bold="true" Font-Italic="true" Text='<%# Eval("custID") %>'
                                    Visible="false" runat="server" />
                                <telerik:RadGrid runat="server" ID="OrdersGrid" DataSourceID="SqlDataSource2"
                                    ShowFooter="true" AllowSorting="true" EnableLinqExpressions="false">
                                    <MasterTableView ShowHeader="true" AutoGenerateColumns="False" AllowPaging="true" EditMode="InPlace"
                                        DataKeyNames="OrderID" PageSize="7" HierarchyLoadMode="ServerOnDemand" CommandItemDisplay="Top">
                                        <Columns>
                                            <telerik:GridNumericColumn SortExpression="Description" HeaderText="Description" HeaderButtonType="TextButton"
                                                DataField="Description" UniqueName="Description">
                                            </telerik:GridNumericColumn>
                                            <telerik:GridBoundColumn SortExpression="Price" HeaderText="Price" HeaderButtonType="TextButton"
                                                DataField="Price" UniqueName="Price">
                                            </telerik:GridBoundColumn>
                                            <telerik:GridDateTimeColumn SortExpression="PayOnline" HeaderText="PayOnline" HeaderButtonType="TextButton"
                                                DataField="PayOnline" UniqueName="Payonline">
                                            </telerik:GridDateTimeColumn>
                                            <telerik:GridBoundColumn UniqueName="Frequency" DataField="FrequencyNum"
                                                HeaderText="Frequency">
                                            </telerik:GridBoundColumn>
                                        </Columns>
                                    </MasterTableView>
                                </telerik:RadGrid>
                                <asp:SqlDataSource ID="SqlDataSource2" ConnectionString="<%$ ConnectionStrings:MainConnectionString %>"
                                    ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM CustJobs Where custID = @custID "
                                    runat="server">
                                    <SelectParameters>
                                        <asp:ControlParameter ControlID="Label1" PropertyName="Text" Type="String" Name="custID" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
 
                            </telerik:RadPageView>
                            <telerik:RadPageView runat="server" ID="PageView2" Width="600px">
                                <asp:Label ID="Label2" Font-Bold="true" Font-Italic="true" Text='<%# Eval("custID") %>'
                                    Visible="false" runat="server" />
                                <telerik:RadGrid runat="server" ID="RadGrid2" DataSourceID="SqlDataSource2"
                                    ShowFooter="true" AllowSorting="true" EnableLinqExpressions="false">
                                    <MasterTableView ShowHeader="true" AutoGenerateColumns="False" AllowPaging="true" EditMode="InPlace"
                                        DataKeyNames="OrderID" PageSize="7" HierarchyLoadMode="ServerOnDemand">
                                        <Columns>
                                            <telerik:GridNumericColumn SortExpression="FrequencyNum" HeaderText="Frequency" HeaderButtonType="TextButton"
                                                DataField="FrequencyNum" UniqueName="FrequencyNum">
                                            </telerik:GridNumericColumn>
                                            <telerik:GridBoundColumn SortExpression="FrequencyTerm" HeaderText=".." HeaderButtonType="TextButton"
                                                DataField="FrequencyTerm" UniqueName="FrequencyTerm">
                                            </telerik:GridBoundColumn>
                                            <telerik:GridDateTimeColumn SortExpression="FirstClean" HeaderText="FirstClean" HeaderButtonType="TextButton"
                                                DataField="FirstClean" UniqueName="FirstClean">
                                            </telerik:GridDateTimeColumn>
                                            <telerik:GridBoundColumn UniqueName="NextDue" HeaderText="Next Due" HeaderButtonType="TextButton"
                                                DataField="NextDue">
                                            </telerik:GridBoundColumn>
                                        </Columns>
                                    </MasterTableView>
                                </telerik:RadGrid>
                                <asp:SqlDataSource ID="SqlDataSource3" ConnectionString="<%$ ConnectionStrings:MainConnectionString %>"
                                    ProviderName="System.Data.SqlClient" SelectCommand="SELECT * FROM CustJobs Where custID = @custID "
                                    runat="server">
                                    <SelectParameters>
                                        <asp:ControlParameter ControlID="Label1" PropertyName="Text" Type="String" Name="custID" />
                                    </SelectParameters>
                                </asp:SqlDataSource>
 
                            </telerik:RadPageView>
 
                        </telerik:RadMultiPage>
                    </asp:Panel>
                </NestedViewTemplate>
                <Columns>
                    <telerik:GridBoundColumn DataField="custID" SortExpression="custID" HeaderText="custID" Visible="false" >
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Name" HeaderText="Name" HeaderButtonType="TextButton" ItemStyle-Font-Size="Smaller"
                        DataField="Name" UniqueName="Name" ItemStyle-Width="5" HeaderStyle-Width="5" FilterControlWidth="5">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Addr1" HeaderText="Address" HeaderButtonType="TextButton" ItemStyle-Font-Size="Smaller"
                        DataField="Addr1" UniqueName="Addr1">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Addr2" HeaderText="" HeaderButtonType="TextButton" ItemStyle-Font-Size="Smaller"
                        DataField="Addr2" UniqueName="Addr2">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Town" HeaderText="Town" HeaderButtonType="TextButton" ItemStyle-Font-Size="Smaller"
                        DataField="Town" UniqueName="Town">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="County" HeaderText="County" HeaderButtonType="TextButton" ItemStyle-Font-Size="Smaller"
                        DataField="County" UniqueName="County">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="PostCode" HeaderText="PostCode" HeaderButtonType="TextButton" MaxLength="8" ItemStyle-Font-Size="Smaller"
                        DataField="PostCode" UniqueName="PostCode">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Tel" HeaderText="Tel" HeaderButtonType="TextButton" MaxLength="11" ItemStyle-Font-Size="Smaller"
                        DataField="Tel" UniqueName="Tel">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Mobile" HeaderText="Mobile" HeaderButtonType="TextButton" MaxLength="11" ItemStyle-Font-Size="Smaller"
                        DataField="Mobile" UniqueName="Mobile">
                    </telerik:GridBoundColumn>
                    <telerik:GridBoundColumn SortExpression="Email" HeaderText="Email" HeaderButtonType="TextButton" ItemStyle-Font-Size="Smaller"
                        DataField="Email" UniqueName="Email">
                    </telerik:GridBoundColumn>                   
                    <telerik:GridEditCommandColumn ButtonType="ImageButton" UniqueName="EditCommandColumn">
                        <ItemStyle CssClass="MyImageButton" />
                    </telerik:GridEditCommandColumn>
                </Columns>
            </MasterTableView>
            <ClientSettings AllowDragToGroup="true" />
        </telerik:RadGrid>
 
 
 
 
 
 
 
 
 Protected Sub RadGrid1_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles RadGrid1.PreRender
 
    'REPLACE with oleDB method b4 go live
    '----------
        Dim strGUID2Find As String
        strGUID2Find = Session("CustGUID")
    '-------------
    'use session var for debugging.. switch to OLEDB method before go live.
 
        ' Do nothing if RadGrid is in insert mode or no new item is inserted recently.
        If RadGrid1.MasterTableView.IsItemInserted OrElse strGUID2Find = "" Then
            Return
        End If
 
 
        Dim currentPageIndex As Integer = RadGrid1.CurrentPageIndex
 
        ' loop thru grid to find latest rec inserted..
        For i As Integer = 0 To RadGrid1.PageCount - 1
            ' Compare CustID of each item in the RadGrid with the newly inserted item custID
            For Each item As GridDataItem In RadGrid1.Items
                If strGUID2Find.Equals(item("CustID").Text) Then
                    ' Select the last inserted row
                    item.Selected = True
                    item.Expanded = True
 
                      Dim tableView As GridTableView = DirectCast(item.ChildItem.NestedTableViews(0), GridTableView)
                      tableView.IsItemInserted = True
 
                    currentPageIndex = -1
                    ' flag exit
                    Exit For
                End If
            Next
 
            ' If item is found then exit RadGrid page loop
            If currentPageIndex.Equals(-1) Then
                Exit For
            End If
 
            ' Go to next RadGrid page
            currentPageIndex += 1
            If currentPageIndex >= RadGrid1.PageCount Then
                currentPageIndex = 0
            End If
            RadGrid1.CurrentPageIndex = currentPageIndex
            RadGrid1.Rebind()
        Next
    End Sub

1 Answer, 1 is accepted

Sort by
0
Tsvetina
Telerik team
answered on 14 Mar 2012, 05:26 PM
Hi Matthew,

From what I see you have a RadGrid inside the NestedViewTemplate of another grid - not just a single grid instance with hierarchy relations. In such case, you need to access the child grid and put its MasterTableView in insert mode, since these grids are separate controls with separate states.

Greetings,
Tsvetina
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the RadControls for ASP.NET AJAX, subscribe to their blog feed now.
Tags
Grid
Asked by
Matthew
Top achievements
Rank 1
Answers by
Tsvetina
Telerik team
Share this question
or