Sean Severson
Top achievements
Rank 1
Sean Severson
asked on 23 Jun 2010, 09:47 PM
I am handling the resizing of columns in my master and detail tables via JavaScript and need to know how to determine if the vertical scroll bar is visible in the grid.
Sean M. Severson
Sean M. Severson
7 Answers, 1 is accepted
0
Hello Sean,
If you are using Scrolling in RadGrid, you can use the RadGrid client object to compare the scroll height and the offset height of the GridDataDiv:
A difference between the two values (particularly, scrollHeight being larger) indicates vertical scrolling.
Sincerely yours,
Veli
the Telerik team
If you are using Scrolling in RadGrid, you can use the RadGrid client object to compare the scroll height and the offset height of the GridDataDiv:
$find("<%= RadGrid1.ClientID %>").GridDataDiv.scrollHeight$find("<%= RadGrid1.ClientID %>").GridDataDiv.offsetHeightA difference between the two values (particularly, scrollHeight being larger) indicates vertical scrolling.
Sincerely yours,
Veli
the Telerik team
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 Public Issue Tracking
system and vote to affect the priority of the items
0
Sean Severson
Top achievements
Rank 1
answered on 06 Jul 2010, 04:03 PM
Veli,
Your suggestion works well, except for when I expand a parent record to show child records. When I do this the scrollHeight is greater than the offsetHeight even though the scrollbar is not visible in the grid even with the expansion of the child records.
Sean M. Severson
Your suggestion works well, except for when I expand a parent record to show child records. When I do this the scrollHeight is greater than the offsetHeight even though the scrollbar is not visible in the grid even with the expansion of the child records.
Sean M. Severson
0
Hi Sean,
The only time an element can have a greater scrollHeight than offsetHeight and not show any scroll bars is when the element overflow is set to "visible" or "hidden". This is not the case with the GridDataDiv in RadGrid.
Can you post some sample code that will help us reproduce this? It might be possible that these calculations are mare before RadGrid fully updates it's elements (for example checking the scrollHeight and offsetHeight before a parent item is actually expanded).
Another approach to check if the grid shows a scroll bar is to calculate the difference between the offsetHeights of the GridDataDiv and the MasterTableView:
Sincerely yours,
Veli
the Telerik team
The only time an element can have a greater scrollHeight than offsetHeight and not show any scroll bars is when the element overflow is set to "visible" or "hidden". This is not the case with the GridDataDiv in RadGrid.
Can you post some sample code that will help us reproduce this? It might be possible that these calculations are mare before RadGrid fully updates it's elements (for example checking the scrollHeight and offsetHeight before a parent item is actually expanded).
Another approach to check if the grid shows a scroll bar is to calculate the difference between the offsetHeights of the GridDataDiv and the MasterTableView:
$find("<%= RadGrid1.ClientID %>").GridDataDiv.offsetHeight$find("<%= RadGrid1.ClientID %>").get_masterTableView().get_element().offsetHeightSincerely yours,
Veli
the Telerik team
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 Public Issue Tracking
system and vote to affect the priority of the items
0
Sean Severson
Top achievements
Rank 1
answered on 07 Jul 2010, 03:09 PM
Veli,
The problem appears to be that when i expand a parent to display the children, $find("<%= RadGrid1.ClientID %>").GridDataDiv.offsetHeight is set to 10 instead of the true offsetHeight, which is more like 350. So, my code thinks that the scroll bar is displayed since
$find("<%= RadGrid1.ClientID %>").get_masterTableView().get_element().offsetHeight
> $find("<%= RadGrid1.ClientID %>").GridDataDiv.offsetHeight
Some background, I am loading the child rows on demand when the user clicks the expand button on the parent row.
Wouldn't $find("<%= RadGrid1.ClientID %>").GridDataDiv.offsetHeight show a slightly larger offsetHeight when the child rows are displayed for one parent than before any child row expansion?
Sean M. Severson
0
Hello Sean,
In this case, I suggest you use the client-side GridCreated event for your calculations, as you need to wait for the response to arrive and RadGrid to recreate its structure.
Can you post some code we can look at if the problem persists?
Kind regards,
Veli
the Telerik team
Some background, I am loading the child rows on demand when the user clicks the expand button on the parent row. In this case, I suggest you use the client-side GridCreated event for your calculations, as you need to wait for the response to arrive and RadGrid to recreate its structure.
Can you post some code we can look at if the problem persists?
Kind regards,
Veli
the Telerik team
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 Public Issue Tracking
system and vote to affect the priority of the items
0
Sean Severson
Top achievements
Rank 1
answered on 08 Jul 2010, 01:38 PM
Veli,
I have provided some code, but I'm not sure how valuable it will be in isolation. The javascript that resizes my grid is run on the resize event of the window (window.onresize). Essentially, this code supports the resizing of the browser window and keeps the columns in the parent and child rows alligned. The two issues I am experiencing are that the scrollbarsize is being set incorrectly when a parent row is expanded to display its children and the child columns don't quite match up exactly with the parent columns.
I'll try running the scripts on the GridCreated and see if the problem of the incorrect setting of the scrollbarsize persists.
Sean M. Severson.
I have provided some code, but I'm not sure how valuable it will be in isolation. The javascript that resizes my grid is run on the resize event of the window (window.onresize). Essentially, this code supports the resizing of the browser window and keeps the columns in the parent and child rows alligned. The two issues I am experiencing are that the scrollbarsize is being set incorrectly when a parent row is expanded to display its children and the child columns don't quite match up exactly with the parent columns.
I'll try running the scripts on the GridCreated and see if the problem of the incorrect setting of the scrollbarsize persists.
Sean M. Severson.
function reSizectl00_ContentPlaceHolder1_rg_rgRenewalList() { //debugger; //doing try catch just to make sure that we display grid even if there is a javascript error!@ try{ var w=0; var h=0; var pageheight = document.documentElement.clientHeight; var pagewidth = document.documentElement.clientWidth ; var objGrid = $find('ctl00_ContentPlaceHolder1_rg_rgRenewalList'); if (objGrid != null) { var elemTop = getElementTop(objGrid.get_element()); var elemLeft = getElementLeft(objGrid.get_element()); h = (pageheight - elemTop - 25); w = (pagewidth - elemLeft - elemLeft - 5); saveWidthctl00_ContentPlaceHolder1_rg_rgRenewalList = w; if (w > 0) { reSizeGridToctl00_ContentPlaceHolder1_rg_rgRenewalList(h,w); objGrid.repaint(); } } } catch(e) { //Catch the error thrown and do something with it. alert("You have this problem:\n\t" + e.description); } if ($get('ctl00_ContentPlaceHolder1_rg_gridholder') != null) ctl00_ContentPlaceHolder1_rg_gridholder.style.display = "block"; } function reSizeGridToctl00_ContentPlaceHolder1_rg_rgRenewalList(h,w) { var gridObject = $find('ctl00_ContentPlaceHolder1_rg_rgRenewalList');var gridElement = gridObject.get_element(); gridElement.style.width = w + "px"; gridElement.style.height = h + "px"; gridObject.repaint(); debugger; var masterTableView = gridObject.get_masterTableView(); if (masterTableView == null) { return; } var hdr = gridObject.get_masterTableViewHeader(); if (hdr == null) { return; } var scrollbarsize = 0; var detailTables = gridObject.get_detailTables(); var masterTable = masterTableView.get_element(); if (masterTable.offsetHeight > gridObject.GridDataDiv.offsetHeight) {scrollbarsize = 20; }
var c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,c10; c0 = 19; //indicator c10 = 50; //action w = w - c0 - c10 - c10 - scrollbarsize - 5; c1 = Math.round(w * .08); //PolicyNumber c2 = Math.round(w * .15); //Insured name c3 = Math.round(w * .08); //Expiration Date c4 = Math.round(w * .08); //Premium c5 = Math.round(w * .10); //Agent c6 = Math.round(w * .08); //Status c7 = Math.round(w * .15); //TaskType c8 = Math.round(w * .13); //Assigned To c9 = Math.round(w * .13); //Owner //adjust for rounding c10 = c10 + w - c1 - c2 - c3 - c4 - c5 - c6 - c7 - c8 - c9; hdr.ColGroup.Cols[0].width = masterTableView.ColGroup.Cols[0].width = c0 + "px"; //ind hdr.ColGroup.Cols[1].width = masterTableView.ColGroup.Cols[1].width = c1 + "px"; //PolicyNumber hdr.ColGroup.Cols[2].width = masterTableView.ColGroup.Cols[2].width = c2 + "px"; //Insured name hdr.ColGroup.Cols[3].width = masterTableView.ColGroup.Cols[3].width = c3 + "px"; //Expiration Date hdr.ColGroup.Cols[4].width = masterTableView.ColGroup.Cols[4].width = c4 + "px"; //Premium hdr.ColGroup.Cols[5].width = masterTableView.ColGroup.Cols[5].width = c5 + "px"; //Agent hdr.ColGroup.Cols[6].width = masterTableView.ColGroup.Cols[6].width = c6 + "px"; //Status hdr.ColGroup.Cols[7].width = masterTableView.ColGroup.Cols[7].width = c7 + "px"; //TaskType hdr.ColGroup.Cols[8].width = masterTableView.ColGroup.Cols[8].width = c8 + "px"; //Assigned To hdr.ColGroup.Cols[9].width = masterTableView.ColGroup.Cols[9].width = c9 + "px"; //Owner hdr.ColGroup.Cols[10].width = masterTableView.ColGroup.Cols[10].width = c10 + "px"; //action for (var j = 0; j < detailTables.length; j++) { if(detailTables[j].get_name() == "AssociatedPolicies") { detailTables[j].ColGroup.Cols[0].width = c1-1 + "px"; //PolicyNumber detailTables[j].ColGroup.Cols[1].width = c2-1 + "px"; //Insured Name detailTables[j].ColGroup.Cols[2].width = c3-1 + "px"; //Expiration Date detailTables[j].ColGroup.Cols[3].width = c4-1 + "px"; //Premium detailTables[j].ColGroup.Cols[4].width = c5-1 + "px"; //Agent detailTables[j].ColGroup.Cols[5].width = c6-1 + "px"; //Status detailTables[j].ColGroup.Cols[6].width = c7-1 + "px"; //TaskType detailTables[j].ColGroup.Cols[7].width = c8-1 + "px"; //Assigned To detailTables[j].ColGroup.Cols[8].width = c9-1 + "px"; //Owner detailTables[j].ColGroup.Cols[9].width = c10-1 + "px"; //action } } }0
Hi Sean,
Yes, you can call the same method in GridCreated as, at this point, RadGrid will be re-initialized after postback. Also try it with a small timeout, e.g. 200 or 300 ms:
Veli
the Telerik team
Yes, you can call the same method in GridCreated as, at this point, RadGrid will be re-initialized after postback. Also try it with a small timeout, e.g. 200 or 300 ms:
function gridCreated(sender, args){ setTimeout(function() { //call your functions here }, 300);}Veli
the Telerik team
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 Public Issue Tracking
system and vote to affect the priority of the items