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

Accessing nested grid items

3 Answers 252 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Alin
Top achievements
Rank 1
Alin asked on 31 May 2011, 11:51 AM
Hello

I have a grid with child items that are nested tables views, like in the hierarchy examples:
<telerik:RadGrid ID="RadGrid1" OnPreRender="RadGrid1_PreRender" ShowStatusBar="true" DataSourceID="SqlDataSource1"
            runat="server" AutoGenerateColumns="False" AllowFilteringByColumn="true" Width="100%" PageSize="100" AllowSorting="True"
            AllowMultiRowSelection="False" AllowAutomaticDeletes="true" AllowAutomaticInserts="true" AllowAutomaticUpdates="true"
            AllowPaging="True" GridLines="None" OnItemDataBound="RadGrid1_ItemDataBound" OnItemUpdated="RadGrid1_ItemUpdated"
            OnDataBound="RadGrid1_DataBound"
            OnItemInserted="RadGrid1_ItemInserted" OnItemDeleted="RadGrid1_ItemDeleted">
            <PagerStyle Mode="NextPrevNumericAndAdvanced" Position="TopAndBottom"></PagerStyle>
 
            <MasterTableView DataSourceID="SqlDataSource1" CommandItemDisplay="Top" DataKeyNames="Id" AllowMultiColumnSorting="True">
                <DetailTables>
                    <telerik:GridTableView Name="ChildProgs" DataKeyNames="Id" DataSourceID="SqlDataSource2" Width="100%"
                        runat="server">
                        <ParentTableRelation>
                            <telerik:GridRelationFields DetailKeyField="ProgramParent_Id" MasterKeyField="Id" />
                        </ParentTableRelation>
                        <Columns>
                            <telerik:GridEditCommandColumn ItemStyle-Width="20px" HeaderText="Edit" ButtonType="ImageButton" UniqueName="EditCommandColumn">
                            <ItemStyle CssClass="MyImageButton" />
                             </telerik:GridEditCommandColumn>
                            <telerik:GridBoundColumn ItemStyle-Width="20px" ReadOnly="true" Visible="true" DataField="Id" HeaderText="Id"
                                SortExpression="Id" ItemStyle-HorizontalAlign="Center"  ItemStyle-VerticalAlign="Top"
                                HeaderStyle-HorizontalAlign="Center"
                                UniqueName="Id">
                            </telerik:GridBoundColumn>
                            <telerik:GridTemplateColumn HeaderText="Title" ItemStyle-HorizontalAlign="Center" SortExpression="Title" ItemStyle-VerticalAlign="Middle"
                                    UniqueName="Title" DataField="Title" HeaderStyle-HorizontalAlign="Center">
                                    <ItemTemplate>
                                        <asp:Label ID="lblTitle" runat="server" Text='<%# TrimDescription(Eval("Title") as string) %>' />
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <telerik:RadTextBox ID="txbTitle" Width="300px" runat="server" TextMode="SingleLine"
                                            Text='<%# Bind("Title") %>' />
                                    </EditItemTemplate>
                                    <ItemStyle VerticalAlign="Top" />
                             </telerik:GridTemplateColumn>
.............
        <Columns>
 
                    <telerik:GridBoundColumn DataField="Id" AllowFiltering="true" ReadOnly="true" ItemStyle-Width="20px"
                    ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Top" HeaderStyle-HorizontalAlign="Center" HeaderText="Parent Id"
                    SortExpression="Id" UniqueName="Id">
                    </telerik:GridBoundColumn>
 
                    <telerik:GridTemplateColumn HeaderText="Title" AllowFiltering="true" ItemStyle-HorizontalAlign="Center"
                           HeaderStyle-HorizontalAlign="Center" SortExpression="Title" ItemStyle-VerticalAlign="Top" UniqueName="Title" DataField="Title">
                        <ItemTemplate>
                            <asp:Label ID="lblTitle" runat="server" Text='<%# TrimDescription(Eval("Title") as string) %>' />
                        </ItemTemplate>
                        <EditItemTemplate>
                            <telerik:RadTextBox ID="txbTitle" Width="300px" runat="server" TextMode="SingleLine"
                                Text='<%# Bind("Title") %>' />
                        </EditItemTemplate>
                        <ItemStyle VerticalAlign="Top" />
                    </telerik:GridTemplateColumn>
.....
</Columns>
                <SortExpressions>
                    <telerik:GridSortExpression FieldName="Title"></telerik:GridSortExpression>
                </SortExpressions>
            </MasterTableView>
 
        </telerik:RadGrid>

I tried the below code in the RadGrid1_DataBound event, but with no results, as it never enters in the loop, like no items are found.
I would also like to access the child items in edit mode, like OnDataBound or something similar...
GridTableView nestedTableView = (RadGrid1.MasterTableView.Items[0] as GridDataItem).ChildItem.NestedTableViews[0];
 
            foreach (GridNestedViewItem nestedViewItem in nestedTableView.GetItems(GridItemType.NestedView))
            {
                ((Label)nestedViewItem.Controls[1]).Text = ((Label)nestedViewItem.Controls[1]).Text + "-testing";
            }

Could u plz tell me what i'm doing wrong? Thx a lot.

3 Answers, 1 is accepted

Sort by
0
Jayesh Goyani
Top achievements
Rank 2
answered on 31 May 2011, 12:42 PM
Hi
protected void radgrdFees_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item.OwnerTableView.Name == "ChildTable")
        {
            if (e.Item.IsInEditMode)
            {
                    GridEditableItem editItem = (GridEditableItem)e.Item;
                    Label lblAccountBalance = (Label)editItem.FindControl("lblAccountBalance");
                    lblAccountBalance.Text = "";
                
            }
        }
    }

<telerik:GridTableView       Name="ChildTable" >


Thanks,
Jayesh Goyani
0
Alin
Top achievements
Rank 1
answered on 31 May 2011, 01:51 PM
Hi,

First of all thx for your reply.
Second, I would also like to access the child items when the grid is NOT in edit mode, in the PreRender or DataBound event for ex:
protected void RadGrid1_DataBound(object sender, EventArgs e)
        {
          // doesnt work
            foreach (GridDataItem parentItem in RadGrid1.MasterTableView.Items)
            {
                GridTableView childtable = (GridTableView)parentItem.ChildItem.NestedTableViews[0];
                foreach (GridDataItem childEditItem in childtable.OwnerGrid.Items)
                {
                    string strtxt = ((TextBox)childEditItem["Title"].Controls[0]).Text;
                }
            }
Any ideea?
Thx a lot again.
0
Alin
Top achievements
Rank 1
answered on 31 May 2011, 03:59 PM
Nevermind, i found a solution :)

if (e.Item.OwnerTableView.Name == "ChildProgs")
{
             if (e.Item.IsInEditMode)
             {
                   GridEditableItem editItem = (GridEditableItem)e.Item;
                   if (!string.IsNullOrEmpty(((Label)editItem.FindControl("lblSubTitleChild")).ToolTip))
                   {
                      RadTextBox tb = (RadTextBox)editItem.FindControl("txbSubTitleChild");
                      tb.Text = ((Label)editItem.FindControl("lblSubTitleChild")).ToolTip;
                   }
                   if (!string.IsNullOrEmpty(((Label)editItem.FindControl("lblDescriptionChild")).ToolTip))
                   {
                  RadTextBox tb = (RadTextBox)editItem.FindControl("lblDescriptionChild");
                  tb.Text = ((Label)editItem.FindControl("lblDescriptionChild")).ToolTip;
                                    }
....
}else
{
        if (e.Item.OwnerTableView.Name == "ChildProgs")
                        {
                            if (e.Item is GridDataItem && !e.Item.IsInEditMode)
                            {
                                string stepId = e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["Id"].ToString();
                                if (!string.IsNullOrEmpty(((Label)e.Item.FindControl("lblSubTitleChild")).Text))
                                {
                                    if (((Label)e.Item.FindControl("lblSubTitleChild")).Text.Length > 10)
                                    {
                                        ((Label)e.Item.FindControl("lblSubTitleChild")).ToolTip = ((Label)e.Item.FindControl("lblSubTitleChild")).Text;
                                        ((Label)e.Item.FindControl("lblSubTitleChild")).Text = ((Label)e.Item.FindControl("lblSubTitleChild")).Text.Substring(0,8) + " ...";
                                    }
                                }
.....
}
Tags
Grid
Asked by
Alin
Top achievements
Rank 1
Answers by
Jayesh Goyani
Top achievements
Rank 2
Alin
Top achievements
Rank 1
Share this question
or