RAD Grid - ItemDataBound event for detail tables

11 posts, 1 answers
  1. Riz
    Riz avatar
    8 posts
    Member since:
    Sep 2011

    Posted 19 Sep 2011 Link to this post

    Hi,

    We are using Rad Grid which has a detail table per row in master table. We have an event ItemDataBound for master table but can't find this event for child/detail table. How can I use that?

    Thanks
  2. Answer
    Jayesh Goyani
    Jayesh Goyani avatar
    2732 posts
    Member since:
    May 2010

    Posted 19 Sep 2011 Link to this post

    Hello,

    there is only one itemdatabound is there for all grid. You can identify parent / child grid by using below code snippet..

    protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
        {
            if (e.Item is GridDataItem && e.Item.OwnerTableView.Name == "ParentGrid")
            {
                // your logic should come here
            }
            else if (e.Item is GridDataItem && e.Item.OwnerTableView.Name == "ChildGrid")
            {
                // your logic should come here
            }
        }
    <MasterTableView  Name="ParentGrid">
               <DetailTables>
                <telerik:GridTableView Name="ChildGrid"


    Thanks,
    Jayesh Goyani
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. Riz
    Riz avatar
    8 posts
    Member since:
    Sep 2011

    Posted 19 Sep 2011 Link to this post

  5. Kapil
    Kapil avatar
    3 posts
    Member since:
    May 2013

    Posted 10 Jul 2013 Link to this post

    I am able to get Client Grid , but value are coming as "nbsp;"

    protected void Grid_ItemDataBound(object sender, GridItemEventArgs e)
            {
                if (e.Item is GridDataItem && e.Item.OwnerTableView.Name == "ChildGrid")
                {
                    GridDataItem item = (GridDataItem)e.Item;
                    string val1 = item["PublicationType"].Text;
                }
            }


    here val1 is coming as "nbsp;"

    where as when grid get displayed it is displaying the actual value as expected. but I am not getting value in the above ItemDataBound function
  6. Jayesh Goyani
    Jayesh Goyani avatar
    2732 posts
    Member since:
    May 2010

    Posted 11 Jul 2013 Link to this post

    Hello,

    Can you please provide your grid mark up (aspx page code)?

    Thanks,
    Jayesh Goyani
  7. Kapil
    Kapil avatar
    3 posts
    Member since:
    May 2013

    Posted 11 Jul 2013 Link to this post

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Submissions.ascx.cs"
        Inherits="SitefinityWebApp.Controls.Submissions" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <asp:PlaceHolder ID="PlaceHolder" runat="server"></asp:PlaceHolder>


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.UI.WebControls;
    using Telerik.Sitefinity.DynamicModules;
    using Telerik.Sitefinity.DynamicModules.Model;
    using Telerik.Sitefinity.Model;
    using Telerik.Sitefinity.Utilities.TypeConverters;
    using Telerik.Web.UI;
    using Telerik.Sitefinity.Modules.Libraries;
    using Telerik.Sitefinity.Model.ContentLinks;
    using Telerik.Sitefinity.Libraries.Model;
     
    namespace SitefinityWebApp.Controls
    {
        [Telerik.Sitefinity.Web.UI.ControlDesign.ControlDesigner(typeof(SitefinityWebApp.Designer.SubmissionDesigner))]
        public partial class Submissions : System.Web.UI.UserControl
        {
            private string rowselected;
     
            public string DocumentStatus { get; set; }
            public string Sector { get; set; }
            public string Series { get; set; }
            public string PublicationType { get; set; }
     
            protected void Grid_DetailTableDataBind(object source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
            {
                e.DetailTableView.DataSource = GetGridItems();
            }
     
            private IQueryable<DynamicContent> GetGridItems()
            {
                Type submissionsType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.DMS.Submission");
     
                DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
                var myCollection = dynamicModuleManager.GetDataItems(submissionsType)
                                                        .Where(i => i.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live &&
                                                                    i.Visible == true && i.GetValue<string>("Sector") == Sector);
                return myCollection;
            }
     
             
            private void DefineGridStructure(RadGrid grid)
            {
                Dictionary<string, string> columnNamesMainGrid;
                Dictionary<string, string> columnNamesChildGrid;
     
                columnNamesMainGrid = new Dictionary<string, string>();
                columnNamesMainGrid.Add("DocumentName", "Name");
                columnNamesMainGrid.Add("Document", "Document");
                columnNamesMainGrid.Add("DocumentStatus", "Document Status");
     
                columnNamesChildGrid = new Dictionary<string, string>();
                columnNamesChildGrid.Add("Sector", "~/Sector?");
                columnNamesChildGrid.Add("Series", "~/Series?");
                columnNamesChildGrid.Add("PublicationType", "~/publicationtype?");
                columnNamesChildGrid.Add("NumberOfPages", "Number Of Pages");
                columnNamesChildGrid.Add("Document", "~/Document?");
     
     
                grid.ID = "Grid";
                grid.MasterTableView.Name = "MasterGrid";
                grid.MasterTableView.DataKeyNames = new string[] { "ID" };
     
                grid.Width = Unit.Percentage(100);
                grid.PageSize = 10;
                grid.AllowPaging = true;
                grid.AllowSorting = true;
                grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric;
                grid.AutoGenerateColumns = false;
                grid.ShowStatusBar = false;
                grid.ShowHeader = true;
                 
                grid.ClientSettings.AllowExpandCollapse = true;
     
                grid.DetailTableDataBind += new GridDetailTableDataBindEventHandler(Grid_DetailTableDataBind);
                grid.MasterTableView.PageSize = 10;
                grid.ItemDataBound += new GridItemEventHandler(Grid_ItemDataBound);
                GridBoundColumn boundColumn;
                GridHyperLinkColumn hyperlinkColumn = new GridHyperLinkColumn();
     
                foreach (KeyValuePair<string, string> column in columnNamesMainGrid)
                {
                    boundColumn = new GridBoundColumn();
                    boundColumn.DataField = column.Key;
                    boundColumn.HeaderText = column.Value;
                    grid.MasterTableView.Columns.Add(boundColumn);
     
                }
     
                boundColumn = new GridBoundColumn();
                boundColumn.DataField = "ID";
                boundColumn.HeaderText = "ID";
                boundColumn.Visible = false;
                grid.MasterTableView.Columns.Add(boundColumn);
     
                GridTableView tableViewChild = new GridTableView(grid);
                tableViewChild.Width = Unit.Percentage(100);
                tableViewChild.DataKeyNames = new string[] { "ID" };
                tableViewChild.Name = "ChildGrid";
                tableViewChild.ShowHeader = false;
                tableViewChild.GridLines = GridLines.None;
                tableViewChild.BorderStyle = BorderStyle.None;
     
                 
                foreach (KeyValuePair<string, string> column in columnNamesChildGrid)
                {
                    if (column.Value.StartsWith("~"))
                    {
                        hyperlinkColumn = new GridHyperLinkColumn();
                        hyperlinkColumn.DataTextField = column.Key;
                        hyperlinkColumn.UniqueName = column.Key;
                        hyperlinkColumn.NavigateUrl = column.Value;
                        tableViewChild.Columns.Add(hyperlinkColumn);
                    }
                    else
                    {
                        boundColumn = new GridBoundColumn();
                        boundColumn.DataField = column.Key;
                        boundColumn.HeaderText = column.Value;
                        tableViewChild.Columns.Add(boundColumn);
                    }
                }
                GridRelationFields relationFields = new GridRelationFields();
                relationFields.MasterKeyField = "ID";
                relationFields.DetailKeyField = "ID";
                tableViewChild.ParentTableRelation.Add(relationFields);
                 
                grid.MasterTableView.DetailTables.Add(tableViewChild);
                grid.MasterTableView.HierarchyLoadMode = GridChildLoadMode.Client;
            }
            protected void Grid_ItemDataBound(object sender, GridItemEventArgs e)
            {
                if (e.Item is GridDataItem && e.Item.OwnerTableView.Name == "ChildGrid")
                {
                    GridDataItem item = (GridDataItem)e.Item;
                    string val1 = item["PublicationType"].Text;
                    HyperLink hLink = (HyperLink)item["PublicationType"].Controls[0];
                    hLink.NavigateUrl += val1;
                }
            }
            private void DefineGrid()
            {
                var myCollection = GetGridItems();
                RadGrid grid = new RadGrid();
                grid.DataSource = myCollection;
                DefineGridStructure(grid);
                this.PlaceHolder.Controls.Add(grid);
            }
     
     
     
            protected void Page_Init(object source, System.EventArgs e)
            {
                DefineGrid();
            }
        }
    }
  8. Kapil
    Kapil avatar
    3 posts
    Member since:
    May 2013

    Posted 11 Jul 2013 Link to this post

    this is our requirement as we are getting "Telerik.Sitefinity.DynamicTypes.Model.DMS.Submission" from sharepoint connector.
  9. Maria Ilieva
    Admin
    Maria Ilieva avatar
    4017 posts

    Posted 15 Jul 2013 Link to this post

    Hello Kapil,

    I suppose that the issue you are facing is related to the Breaking Change introduced in the previous release, in which in order to approve the RadGrid performance the invisible columns state is no longer persisted. See the sticky thread below for more information on this matter:
    http://www.telerik.com/community/forums/aspnet-ajax/grid/breaking-change-hidden-column-cell-text-is-not-persisted-in-viewstate.aspx

    Regards,
    Maria Ilieva
    Telerik
    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 the blog feed now.
  10. Paulo
    Paulo avatar
    1 posts
    Member since:
    May 2013

    Posted 22 Jul 2013 Link to this post

    Thx Jayesh Goyani!
    You solved my problem.
    []'s.
  11. Perry Blanchard
    Perry Blanchard  avatar
    8 posts
    Member since:
    Jul 2012

    Posted 05 Jun 2015 in reply to Jayesh Goyani Link to this post

    I try to hide/display three items in <detailTable> by useing RadGrid1_ItemDataBound depend ParentTable item DepartmentID .

    Looks like all three items not work right, Sometimes  working right if you expand/collapse one item few times  and sometimes make all wrong if you expand one item while another item is still expand and ........

    My three items,

    1, detailTable.GetColumn("EditCommandColumn2").Display = True/False
    2, detailTable.GetColumn("DeleteColumn2").Display = True/False
    3, detailTable.CommandItemSettings.ShowAddNewRecordButton = True/False

    My  part of aspx page like this,

    ............

    <telerik:RadGrid ID="RadGridDepartment" runat="server" AllowAutomaticDeletes="True" AllowAutomaticInserts="True" AllowAutomaticUpdates="True" AllowMultiRowSelection="False" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSourceDepartment" GridLines="None" PageSize="40" ShowStatusBar="true" Skin="Outlook">
    <PagerStyle Mode="NumericPages" />
    <MasterTableView runat="server" AllowMultiColumnSorting="True" AutoGenerateColumns="False" CommandItemDisplay="Top" CommandItemSettings-AddNewRecordText="Add New Department" CommandItemSettings-ShowRefreshButton="false" DataKeyNames="DepartmentID" DataSourceID="SqlDataSourceDepartment" EditMode="EditForms" Name="Department" Width="100%">
    <CommandItemSettings ShowAddNewRecordButton="false" />
    <DetailTables>
    <telerik:GridTableView runat="server" AutoGenerateColumns="False" CommandItemDisplay="Top" CommandItemSettings-AddNewRecordText="Add New Communication" CommandItemSettings-ShowRefreshButton="false" DataKeyNames="DepartmentID,CommunicationID" DataSourceID="SqlDataSourceCommunications" EditMode="EditForms" Name="Communications" Width="100%">

    <ParentTableRelation>
    <telerik:GridRelationFields DetailKeyField="DepartmentID" MasterKeyField="DepartmentID" />
    </ParentTableRelation>
    <HeaderStyle CssClass="InnerHeaderStyle" />
    <ItemStyle CssClass="InnerItemStyle" />
    <AlternatingItemStyle CssClass="InnerAlernatingItemStyle" />
    <Columns>
    <telerik:GridEditCommandColumn ButtonType="ImageButton" EditImageUrl="images/editChilden.png" HeaderText="Edit" UniqueName="EditCommandColumn2">
    <HeaderStyle Width="20px" />
    <ItemStyle CssClass="MyImageButton" />
    </telerik:GridEditCommandColumn>
    <telerik:GridBoundColumn UniqueName="CommunicationID" HeaderText="Communication ID"
    DataField="CommunicationID" DataType="System.Int32"
    FilterControlAltText="Filter Communication ID column" ReadOnly="True" Visible="false"
    AllowSorting="False">
    </telerik:GridBoundColumn>

    <telerik:GridButtonColumn ButtonType="ImageButton" CommandName="Delete" ConfirmText="Delete this communication?" HeaderText="Delete" ImageUrl="~/images/deleteChilden2.png" Text="Delete" UniqueName="DeleteColumn2">
    <HeaderStyle Width="20px" />
    <ItemStyle CssClass="MyImageButton" HorizontalAlign="Center" />
    </telerik:GridButtonColumn>
    </Columns>
    <SortExpressions>
    <telerik:GridSortExpression FieldName="CommunicationID" SortOrder="Ascending" />
    </SortExpressions>
    <EditFormSettings CaptionDataField="CommunicationID" CaptionFormatString="Edit Communication ID = {0}" ColumnNumber="2" EditColumn-ButtonType="PushButton" FormCaptionStyle-ForeColor="#990000" InsertCaption="Add New Communications">
    <FormTableStyle CellPadding="2" CellSpacing="0" CssClass="module" GridLines="None" Height="90px" Width="100%" />
    <EditColumn CancelText="Cancel" UniqueName="EditCommandColumn1" UpdateText="Update">
    </EditColumn>
    <FormTableButtonRowStyle CssClass="EditFormButtonRow" HorizontalAlign="Left" />
    </EditFormSettings>
    </telerik:GridTableView>
    </DetailTables>

    <Columns>

    <telerik:GridBoundColumn UniqueName="DepartmentID" HeaderText="Department ID"
    DataField="DepartmentID" DataType="System.Int32"
    FilterControlAltText="Filter Department ID column" ReadOnly="True" HeaderStyle-Width="100px"
    AllowSorting="False">
    </telerik:GridBoundColumn>
    <telerik:GridTemplateColumn HeaderText="Department" UniqueName="TemplateColumnDepartment" SortExpression="Department">
    <EditItemTemplate>
    <asp:TextBox ID="TextBoxDepartment" runat="server" Text='<%# Bind("Department")%>' Width="800"></asp:TextBox>
    <asp:RequiredFieldValidator runat="server" ControlToValidate="TextBoxDepartment" ErrorMessage="* required" ForeColor="Red">
    </asp:RequiredFieldValidator>
    </EditItemTemplate>
    <ItemTemplate>
    <asp:Label ID="LabelDepartment" runat="server" Text='<%# Eval("Department")%>'></asp:Label>
    </ItemTemplate>
    </telerik:GridTemplateColumn>
                            
    </Columns>

    <SortExpressions>
    <telerik:GridSortExpression FieldName="DepartmentID" SortOrder="Ascending" />
    </SortExpressions>
    <EditFormSettings CaptionDataField="DepartmentID" CaptionFormatString="Edit Department ID = {0}" ColumnNumber="2" EditColumn-ButtonType="PushButton" FormCaptionStyle-ForeColor="#990000" InsertCaption="Add New Department">
    <FormTableStyle CellPadding="2" CellSpacing="0" CssClass="module" GridLines="None" Height="90px" Width="100%" />
    <EditColumn CancelText="Cancel" UniqueName="EditCommandColumn1" UpdateText="Update">
    </EditColumn>
    <FormTableButtonRowStyle CssClass="EditFormButtonRow" HorizontalAlign="Left" />
    </EditFormSettings>
    </MasterTableView>
    </telerik:RadGrid>

     

     ................

    My aspx.vb like this.

    Private Sub RadGridDepartment_ItemDataBound(sender As Object, e As GridItemEventArgs) Handles RadGridDepartment.ItemDataBound
            If TypeOf e.Item Is GridDataItem AndAlso e.Item.OwnerTableView.Name = "Communications" Then
                Dim parentItem As GridDataItem = e.Item.OwnerTableView.ParentItem
                Dim myDepartmentID As Int32 = parentItem("DepartmentID").Text
                Dim detailTable As GridTableView = DirectCast(e.Item.OwnerTableView, GridTableView)
                If myDepartmentID = 23 Then
                    detailTable.GetColumn("EditCommandColumn2").Display = True
                    detailTable.GetColumn("DeleteColumn2").Display = True
                    detailTable.CommandItemSettings.ShowAddNewRecordButton = True
                Else               

                   detailTable.GetColumn("EditCommandColumn2").Display = False
                    detailTable.GetColumn("DeleteColumn2").Display = False
                    detailTable.CommandItemSettings.ShowAddNewRecordButton = False                       

              End If
            End If

    End Sub

     

     

    I don't know if I need use Page_Load , DetailTableDataBind  and  PreRender.

    Please help.  Thanks. 

  12. Perry Blanchard
    Perry Blanchard  avatar
    8 posts
    Member since:
    Jul 2012

    Posted 05 Jun 2015 in reply to Perry Blanchard Link to this post

    Jayesh,

    I also try RadGridDepartment_DetailTableDataBind, It's not working either.

    Private Sub RadGridDepartment_DetailTableDataBind(sender As Object, e As GridDetailTableDataBindEventArgs) Handles RadGridDepartment.DetailTableDataBind

    Dim parentItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem)
    If parentItem.Edit Then
    Return
    End If
    If (e.DetailTableView.DataMember = "Communications") Then

    If parentItem("DepartmentID").Text = 23 Then
    e.DetailTableView.DetailTables(0).GetColumn("EditCommandColumn2").Visible = True
    e.DetailTableView.DetailTables(0).GetColumn("DeleteColumn2").Visible = True
    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = True
    Else
    e.DetailTableView.DetailTables(0).GetColumn("EditCommandColumn2").Visible = False
    e.DetailTableView.DetailTables(0).GetColumn("DeleteColumn2").Visible = False
    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = False
    End If

    End If


    End Sub

Back to Top
UI for ASP.NET Ajax is Ready for VS 2017