Removing the Add New Item button on Detail Tables

14 posts, 0 answers
  1. mqsash
    mqsash avatar
    31 posts
    Member since:
    May 2012

    Posted 26 Apr 2013 Link to this post

    Hi

    I am trying to make my radgrid (which is wrapped in a usercontrol) "readonly".
    For this I need to remove the "Add New Record" button and the "Edit" and "Delete" columns of the grid.
    I have got the following code to work where the "Edit" and "Delete" columns get removed for the master as well as all the detail tables (I have 4 levels of details), but when it comes to removing the "Add New Record" from the command item bar only the button on the MasterTable gets removed.  Any ideas what I am missing here or how I could hide  the button  on detail tables?

    protected override void OnPreRender(EventArgs e)
    {
      //Complete normal prerender stuff.
      base.OnPreRender(e);
     
      if (ReadOnly)
      {
        MakeGridReadOnly(MasterTableView);
      }
     
    }
     
    private static void MakeGridReadOnly(GridTableView radGridTableView)
    {
      HideAddNewCommandButton(radGridTableView);
      HideEditDeleteColumns(radGridTableView);
     
      foreach (var detailView in radGridTableView.DetailTables )
      {
        MakeGridReadOnly(detailView);
      }
     
    }
     
    private static void HideAddNewCommandButton(GridTableView radGridTableView)
    {
      if (radGridTableView.GetItems(GridItemType.CommandItem).Length <= 0) return;
      var commandItem = radGridTableView.GetItems(GridItemType.CommandItem)[0];

      var newRecordButton = commandItem.FindControl("AddNewRecordButton");
      if (newRecordButton != null)  newRecordButton.Visible = false;
     
      var initInsertButton = commandItem.FindControl("InitInsertButton");
      if (initInsertButton != null) initInsertButton.Visible = false;
     
    }
     
    private static void HideEditDeleteColumns(GridTableView radGridTableView)
    {
      try
      {
        GridColumn editColumn = radGridTableView.Columns.FindByUniqueName("EditCommandColumn");
        if (editColumn != null)
          editColumn.Visible = false;
      }
      catch
      {
      }
     
      try
      {
        GridColumn deleteColumn = radGridTableView.Columns.FindByUniqueName("DeleteCommandColumn");
        if (deleteColumn != null)
          deleteColumn.Visible = false;
      }
      catch
      {
      }
    }
  2. Princy
    Princy avatar
    17421 posts
    Member since:
    Mar 2007

    Posted 28 Apr 2013 Link to this post

    Hi,

    I guess you want to hide the 'AddNewRecord' button from DetailTable. Please try following solutions.

    ASPX:
    . . .
    <DetailTables>
        <telerik:GridTableView CommandItemDisplay="Top" DataKeyNames="OrderID" Name="DetailTable1" Width="100%">
        <CommandItemSettings ShowAddNewRecordButton="false" />
        . . .

    OR

    C#:
    protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridCommandItem && e.Item.OwnerTableView.Name == "DetailTable1")
        {
            e.Item.FindControl("InitInsertButton").Parent.Visible = false;
        }
    }

    Thanks,
    Princy.
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. mqsash
    mqsash avatar
    31 posts
    Member since:
    May 2012

    Posted 29 Apr 2013 Link to this post

    Thanks for the response Princy, but unfortunately my situation is a bit different...
    My situation is similar to the following post:
    http://www.telerik.com/community/forums/aspnet-ajax/ajax/radgrid-addnewrecordbutton-problem-on-prerender-event.aspx#2169542

    and the solution suggested by the telerik team in this post works fine as long as the grid does not have any detail tables.

    In my case, I have a few grids that have detail tables. What I am seeing in this case is a weird behavior  in my "HideAddNewCommandButton" function from the code pasted in the original post.
    When this function is called on the MasterTableView, the "radGridTableView.GetItems(GridItemType.CommandItem)" returns the command item and I can process it and hide the buttons.
    When this function is called on the DetailTableView the "radGridTableView.GetItems(GridItemType.CommandItem).Length" is ZERO, i.e it has no command items and therefore does not find the buttons I want to hide.
    I confirmed it was the right detail table by looking at the "radGridTableView.Name" property, and also confirmed that the markup has the CommandItemDisplay property set so that it is visible, I mean the command bar and the button is visible on the grid !!. Yet for some reason, the code cannot find the command item in the detail tables!
    Any idea why this might be happening or how I can get to the command items of detail tables in the Pre-Render?

    private static void HideAddNewCommandButton(GridTableView radGridTableView)
    {
      if (radGridTableView.GetItems(GridItemType.CommandItem).Length <= 0) return;
      var commandItem = radGridTableView.GetItems(GridItemType.CommandItem)[0];
     
      var newRecordButton = commandItem.FindControl("AddNewRecordButton");
      if (newRecordButton != null)  newRecordButton.Visible = false;
      
      var initInsertButton = commandItem.FindControl("InitInsertButton");
      if (initInsertButton != null) initInsertButton.Visible = false;
      
    }

    Thanks
  5. mqsash
    mqsash avatar
    31 posts
    Member since:
    May 2012

    Posted 29 Apr 2013 Link to this post

    Instead of getting the CommandItem and doing FindControl and stuff on it, found that the tableView class has a property called "CommandItemSettings.ShowAddNewRecordButton"

    Since I already have the detailTableView, all I did was set this to false in the PreRender and viola!! the button is gone, but there's a catch here... the button shows up initially on the grid, but as soon as you click it, it disappears !
    As per the post that I used as a reference, the Pre-render event is too late to hide the buttons based on the property...

    So is there another event that is earlier on that I can set this property and cause the button to be hidden ? The oninit was too early in my case as I did not yet have the information about whether or not I needed to hide the buttons, but the onLoad() worked perfectly well :)

    So now my code looks like this
    public Boolean ReadOnly { get; set; }
     
    protected override void OnLoad(EventArgs e)
    {
      if (ReadOnly)
      {
        MakeGridReadOnly(MasterTableView);
      }
     
      base.OnLoad(e);
    }
     
    private static void MakeGridReadOnly(GridTableView radGridTableView)
    {
      // Hide the Add New Record button
      radGridTableView.CommandItemSettings.ShowAddNewRecordButton = false;
       
      // Hide the Edit and Delete Columns
      HideEditDeleteColumns(radGridTableView);
     
      // Process any child tables of this table.
      foreach (var detailView in radGridTableView.DetailTables )
      {
        MakeGridReadOnly(detailView);
      }
     
    }






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

    Posted 04 Jun 2015 in reply to Princy Link to this post

    detailTable.CommandItemSettings.ShowAddNewRecordButton = False  is not working.

    My  part of aspx page like this.

    ...........

    <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>

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

    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

    Only detailTable.GetColumn("EditCommandColumn2").Display and detailTable.GetColumn("DeleteColumn2").Display

     working

    but, detailTable.CommandItemSettings.ShowAddNewRecordButton = False    not working. Please help.       

     

     

     

     

     

     

  7. Eyup
    Admin
    Eyup avatar
    3015 posts

    Posted 09 Jun 2015 Link to this post

    Hi Perry,

    You will need to set it individually for every GridTableView:
    <telerik:GridTableView ... >
        <CommandItemSettings ShowRefreshButton="false" />

    Hope this helps. Please give it a try and let me know if it works for you.

    Regards,
    Eyup
    Telerik
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
  8. Perry Blanchard
    Perry Blanchard  avatar
    8 posts
    Member since:
    Jul 2012

    Posted 09 Jun 2015 in reply to Eyup Link to this post

    Thanks.  I know this part and this is not I want.

    I try to hide/display three items in <detailTable> by useing RadGrid1_ItemDataBound depend ParentTable item DepartmentID  in aspx.vb page. 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. How can I do it if you think I need?  Thanks. 

  9. Eyup
    Admin
    Eyup avatar
    3015 posts

    Posted 12 Jun 2015 Link to this post

    Hi Perry,

    Please try with DetailTableDataBind and it should work as expected. If ShowAddNewRecordButton does not have effect, you can access the command item of the detailTable using GetItems() method and hide it manually:
    http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/how-to/using-the--getitems-getcolumn-and-getcolumnsafe-methods

    That should do the trick.

    Regards,
    Eyup
    Telerik
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
  10. Perry Blanchard
    Perry Blanchard  avatar
    8 posts
    Member since:
    Jul 2012

    Posted 12 Jun 2015 in reply to Eyup Link to this post

    Thanks. I try DetailTableDataBind. It works now. My code likes this,

    Private Sub RadGridDepartment_DetailTableDataBind(sender As Object, e As GridDetailTableDataBindEventArgs) Handles RadGridDepartment.DetailTableDataBind
            
                Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem)
    Dim myDepartmentID As String = dataItem("DepartmentID").Text

    If myDepartmentID = 23 Then
    e.DetailTableView.GetColumnSafe("EditCommandColumn2").Visible = True
    e.DetailTableView.GetColumnSafe("DeleteColumn2").Visible = True
    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = True
    Else
    e.DetailTableView.GetColumnSafe("EditCommandColumn2").Visible = False
    e.DetailTableView.GetColumnSafe("DeleteColumn2").Visible = False
    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = False
                
            End If
            
    End Sub

    ...........

    The only thing is not work right is if you expand one item while another item is still expand, the all items go wrong. So, I have to make only allow one item expand each time.

    Private Sub RadGridDepartment_ItemCommand(sender As Object, e As GridCommandEventArgs) Handles RadGridDepartment.ItemCommand
    If e.CommandName = RadGrid.ExpandCollapseCommandName Then
    Dim item As GridItem
    For Each item In e.Item.OwnerTableView.Items
    If item.Expanded AndAlso Not item Is e.Item Then
    item.Expanded = False
    End If
    Next item
    End If

    End Sub

     

    I want to know what do I need to do next. Please help.

     

  11. Eyup
    Admin
    Eyup avatar
    3015 posts

    Posted 17 Jun 2015 Link to this post

    Hello Perry,

    Could you prepare a new very basic runnable web site sample to isolate the grid in question and open a formal support ticket to send it to us along with detailed explanations and sample screenshots demonstrating your exact desired behavior?

    Regards,
    Eyup
    Telerik
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
  12. Perry Blanchard
    Perry Blanchard  avatar
    8 posts
    Member since:
    Jul 2012

    Posted 17 Jun 2015 in reply to Eyup Link to this post

    I use DetailTableDataBind(). It works  in hierarchical if there is only one leave detailtable. My question is how do I make my code changes if there are two detailtables in hierarchical. This is my cases. Please see my code.

     

    Private Sub RadGridDepartment_DetailTableDataBind(sender As Object, e As GridDetailTableDataBindEventArgs) Handles RadGridDepartment.DetailTableDataBind
    If Request.Cookies("MyUserType").Value <> "Account Manager" Then
    Dim dataItem As GridDataItem = CType(e.DetailTableView.ParentItem, GridDataItem)
    Dim myDepartmentID As String = dataItem("DepartmentID").Text

    If myDepartmentID = Request.Cookies("DepartmentID").Value Then
    e.DetailTableView.GetColumnSafe("EditCommandColumn2").Visible = True
    e.DetailTableView.GetColumnSafe("DeleteColumn2").Visible = True
    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = True

      Else
    e.DetailTableView.GetColumnSafe("EditCommandColumn2").Visible = False
    e.DetailTableView.GetColumnSafe("DeleteColumn2").Visible = False
    e.DetailTableView.CommandItemSettings.ShowAddNewRecordButton = False

    End If
    End If

    End Sub

  13. Eyup
    Admin
    Eyup avatar
    3015 posts

    Posted 22 Jun 2015 Link to this post

    Hello Perry,

    You can also try to switch to HieararchyLoadMode="ServerBind" or "Client" and traverse the detail tables on PreRender to execute your logic:
    http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/hierarchical-grid-types-and-load-modes/how-to/hiding-the-expand/collapse-images-when-no-records

    Regards,
    Eyup
    Telerik
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
  14. Perry Blanchard
    Perry Blanchard  avatar
    8 posts
    Member since:
    Jul 2012

    Posted 22 Jun 2015 in reply to Eyup Link to this post

    The link you send to me is not work. Can you  try again.

    http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/hierarchical-grid-types-and-load-modes/how-to/hiding-the-expand/collapse-images-when-no-records

     

  15. Eyup
    Admin
    Eyup avatar
    3015 posts

    Posted 23 Jun 2015 Link to this post

    Hi Perry,

    Sorry for that, here is the correct link:
    http://docs.telerik.com/devtools/aspnet-ajax/controls/grid/hierarchical-grid-types-and-load-modes/how-to/hiding-the-expand-collapse-images-when-no-records

    Regards,
    Eyup
    Telerik
    Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Feedback Portal and vote to affect the priority of the items
Back to Top
UI for ASP.NET Ajax is Ready for VS 2017