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

Grid Toolbar not resizing when hidden columns are shown

14 Answers 523 Views
Grid
This is a migrated thread and some comments may be shown as answers.
AP
Top achievements
Rank 1
Iron
Iron
Veteran
AP asked on 27 Jun 2019, 09:14 AM

I have a grid nested within a tab control, with quite a few initially hidden columns.

This looks fine, until some of the hidden columns are shown, when most of the grid expands along with a horizontal scrollbar being shown. However, the toolbar which has the Export To Excel button in it, remains the original width, giving a messy unprofessional look to the screen.

How can I get the toolbar to expand along with the rest of the grid?

I've attached two screenshots, and the Grid code is:-

<div class="panel-body" style="font-size:0.85em;">
 
       @(Html.Kendo().TabStrip()
       .Name("tab")
       .Items(t =>
       {
       t.Add().Text("Listing")
           .Selected(true)
           .Content(@<text>
 
 
               @(Html.Kendo().Grid<WLI_Payments.Models.View_Requests_Master>
   ()
   .Name("Grid")
 
   .Columns(col =>
   {
       col.Bound(o => o.RequestID).Title("Ref.");
       col.Bound(o => o.Directorate).Title("Directorate");
       col.Bound(o => o.RechargeToDirectorate).Title("Recharge Directorate").Hidden();
       col.Bound(o => o.RequestingUser).Title("Requester");
       col.Bound(o => o.Site).Title("Site").Hidden();
       col.Bound(o => o.Location).Title("Location").Hidden();
       col.Bound(o => o.CreationDate).Title("Requested").Format("{0:d}").Width(70);
       col.Bound(o => o.SessionDate).Title("Session").Format("{0:d}").Width(70);
       col.Bound(o => o.PlannedStart).Title("Start").Format("{0:t}").Hidden();
       col.Bound(o => o.PlannedEnd).Title("End").Format("{0:t}").Hidden();
       col.Bound(o => o.ReasonType).Title("Reason Type").Hidden();
       col.Bound(o => o.MedicName).Title("Req. Practitioner");
       col.Bound(o => o.SessionType).Title("Type");
       col.Bound(o => o.PointOfDelivery).Title("PoD");
       col.Bound(o => o.ForecastCost).Title("Forecast £").Format("{0:C}").Width(70);
       col.Bound(o => o.ActualCost).Title("Actual £").Format("{0:C}").Hidden().Width(70);
       col.Bound(o => o.PaymentAmount).Title("Payment").Format("{0:C}").Hidden();
       //col.Bound(o => o.ApprovalStatus).Title("Status");
       //col.Bound(o => o.PaymentStatus).Title("Pay Status");
       col.Bound(o => o.ActualMedicName).Title("Actual Practitioner").Hidden();
       col.Bound(o => o.ActualStart).Title("Start").Format("{0:t}").Hidden();
       col.Bound(o => o.ActualEnd).Title("End").Format("{0:t}").Hidden();
       col.Bound(o => o.RequestTypeDescription).Title("Pathway").Filterable(false).Sortable(false);
       col.Bound(o => o.PaymentBatchID).Title("Batch ID").Hidden();
       col.Bound(o => o.ApprovalStatusCode).Title("Status").ClientTemplate("<span title='#=TotalStatusText#' data-toggle='tooltip' data-placement='top' ><img alt='#=TotalStatusText#' src='" + Url.Content("~/Content/Images/") + "#=TotalStatusGlyph#'  /></span>").Sortable(false).Filterable(false).Width(40);
       //col.Bound(o => o.RequestID).Title("").ClientTemplate("<span style='#=showSubmit#'><button onclick='submitRequest(#=RequestID#);' class='btn btn-primary btn-sm'>Submit</button></span>");
 
       col.Bound(o => o.RequestID).Title("").ClientTemplate("<span style='#=QueryButton#'><button class='btn btn-warning btn-xs xssBtn' onclick='manageQuery(#=RequestID#);'><span class='glyphicon glyphicon-warning-sign' data-toggle='tooltip' data-placement='top' title='Manage query'></span></button></span><span style='margin-left:2px;'><button class='btn btn-info btn-xs xssBtn' data-toggle='tooltip' data-placement='top' title='View Form' onclick='qwikView(#=RequestID#);'><span class='glyphicon glyphicon-search'></span></button></span>").Sortable(false).Filterable(false).Width(60);
 
       col.Bound(o => o.Backdated).Title("").ClientTemplate("<button class='btn btn-info btn-xs xssBtn' data-toggle='tooltip' data-placement='top' title='Admin' onclick='admin(#=RequestID#);'><span class='glyphicon glyphicon-flash'></span></button>").Sortable(false).Filterable(false).Visible((bool)ViewBag.IsAdmin);
 
       col.Bound(o => o.RequestID).Title("").ClientTemplate("#=FinanceQueryButtonCode#").Sortable(false).Filterable(false).Visible((bool)ViewBag.ShowQueryButton);
 
   })
    .ClientDetailTemplateId("subdetailsTemplate")
    .Events(e => e.DataBound("onBound").DataBound("exportUpdate"))
    .ToolBar(toolBar =>
                toolBar.Custom()
                .Text("Export To Excel")
                .HtmlAttributes(new { id = "export" })
                 
                .Url(Url.Action("ExportData", "Enquiry", new { page = 1, pageSize = "~", filter = "~", sort = "~", directorateID = 0, tStatusCode = 0 }))
                )
       .DataSource(ds => ds
       .Ajax()
       .Model(m => m.Id(p => p.RequestID))
       .PageSize(15)
       .Read(rd => rd.Action("RD_Requests", "Enquiry").Data("gridFilter")
       )
       )
 
       .Pageable(p => p.Refresh(true))
       .Sortable()
 
       .Filterable()
       .ColumnMenu()
               )
 
 
 
 
 
 
 
 
           </text>);

 

Thanks

14 Answers, 1 is accepted

Sort by
0
Georgi
Telerik team
answered on 01 Jul 2019, 08:12 AM
Hi Andrew,

The issue occurs since scrolling is not enabled and the columns overflow the element of the grid.

A possible solution would be to enable scrolling and specify a with to each column.

e.g.

// columns
 
       col.Bound(o => o.RequestID).Title("Ref.").Width(50);
       col.Bound(o => o.Directorate).Title("Directorate").Width(50);
 
// enable scrolling
 
.Scrollable();


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 01 Jul 2019, 10:45 AM

Thanks for this. It works.

However, even if I set the height to be auto, a  vertical scroll bar is shown, and setting a fixed height, looks strange when only a few records are being shown. Is there anyway to remove the vertical scrollbar?

 

0
Georgi
Telerik team
answered on 03 Jul 2019, 06:29 AM
Hello Andrew,

You could omit enabling scrolling and simply set the table-layout of the table to fixed. This way the grid will still obey the column widths.

#Grid > table  {
    table-layout: fixed;
}

Have in mind that you still have to specify the widths of the columns.


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 03 Jul 2019, 06:56 AM

Georgi,

I've tried this (in the Razor syntax):- .TableHtmlAttributes(new {style= "table-layout:fixed;" }) , and the original issue occurs - the panel at the top of the grid with the Export To Excel button, doesn't resize as the grid expands.

Can this panel be restyled to just show a button without the surrounding panel instead?

0
Georgi
Telerik team
answered on 03 Jul 2019, 11:29 AM
Hello Andrew,

The grid is constructed of two tables - one for the header and another for the content. Using the TableHtmlAttributes you are setting the table-layout only to the table of the content but you need to do it for both grids.

Could you please test to set the table-layout with CSS as shown in my previous post?

e.g.

#Grid > table  {
    table-layout: fixed;
}

It seems to work as expected on my end.


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 03 Jul 2019, 12:29 PM

Sorry, I've tried it with the css as well:-

<style>
 
 #Grid > table  {
 
    table-layout: fixed;
 
}
 
     
 
</style>

and the top part of the grid refuses to resize (screenshot attached).

 

0
Georgi
Telerik team
answered on 05 Jul 2019, 11:04 AM
Hi Andrew,

I have tested the same on my end but the columns don't seem to overflow once the table-layout is set to fixed.

e.g.



I am attaching the sample I used for testing. Could you please examine it and let me know what I am missing?


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 08 Jul 2019, 12:44 PM

Georgi, I've had a look at your sample application - and you haven't set widths on the columns.

I just set every column to 150, and could replicate my problem (screenshot attached).

 

 

0
Georgi
Telerik team
answered on 10 Jul 2019, 10:09 AM
Hi Andrew,

Thanks for the clarification.

Currently the table is exceeding the initial width of the grid as the table is obeying the column widths, thus the toolbar is misaligned. A possible solution would be to either omit the widths setting and the column widths will be even.

Another solution would be to enable scrolling and remove the vertical scroll.

e.g.

// adjust height within dataBound event handler
 
    function onDataBound() {
        var grid = this;
        $('#grid .k-grid-content').height(ROW_HEIGHT * grid.dataSource.pageSize()).removeAttr('style');
    }
 
 
// remove vertical scrolling
 
    #grid .k-grid-content {
        overflow-y:hidden;
    }
 
    #grid .k-grid-header {
        padding-right:0 !important;
    }

For your convenience I am attaching a modified version of the sample.

I hope this helps.


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 10 Jul 2019, 12:49 PM

Sorry Georgi,

The css doesn't seem to remove the vertical scrollbar of the grid, both in my project, and your sample.

Andrew

 

0
Georgi
Telerik team
answered on 11 Jul 2019, 04:03 PM
Hi Andrew,

The grid actually does not have a scroll bar. Currently due to the large height of the grid, its element overflows the height of the tabstrip. Therefore a scroll appears on the tabstrip. You could remove this scroll by increasing the height of the tabstrip.


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 16 Jul 2019, 02:38 PM

OK,  I turned off scrolling, and tried the css. The vertical scrollbars are no longer appearing, but the original issue of the Excel export box not expanding with the rest of the grid (and the grid footer) remains.

0
Accepted
Georgi
Telerik team
answered on 18 Jul 2019, 11:36 AM
Hi Andrew,

If you disable scrolling it is expected that the columns overflow. The solution I suggested is to enable scrolling but resize the height of the grid so that vertical scrolling is not necessary. You could achieve that by enabling scrolling and resizing the grid within its DataBound event handler.

e.g.

// enable scrolling
 
.Scrollable()
 
// resize grid and the tab of the tabstrip
 
    function onDataBound() {
        var grid = $('#grid').data('kendoGrid');
        var tabstrip = $('#tab').data('kendoTabstrip');
        var initialHeight = $('#grid .k-grid-content').height();
 
        $('#grid .k-grid-content').height(ROW_HEIGHT * grid.dataSource.pageSize()).removeAttr('style');
        $('#grid').height($('#grid').height() + $('#grid .k-grid-content').height() - initialHeight);
        this.wrapper.parent().height($('#grid').height() + 10);
    }
 
// css
 
    #grid .k-grid-content {
        overflow-y:hidden;
    }
 
    #grid .k-grid-header {
        padding-right:0 !important;
    }

Please note that I have included logic for increasing also the height of the tabstrip to avoid the scroll. I am attaching a modified version of the sample.

I hope this helps.


Regards,
Georgi
Progress Telerik
Get quickly onboarded and successful with your Telerik and/or Kendo UI products with the Virtual Classroom free technical training, available to all active customers. Learn More.
0
AP
Top achievements
Rank 1
Iron
Iron
Veteran
answered on 18 Jul 2019, 02:48 PM
Thanks, That's working now
Tags
Grid
Asked by
AP
Top achievements
Rank 1
Iron
Iron
Veteran
Answers by
Georgi
Telerik team
AP
Top achievements
Rank 1
Iron
Iron
Veteran
Share this question
or