Scrolling in Subgrid

Sind heute vor folgende Herausforderung gestellt worden:

Ein Subgrid zeigt auf einer Seite 5 Records. Der Kunde möchte jedoch 10 Records auswählen (verteilt auf mehrere Seiten). Das Grid verliert jedoch nach dem Umblättern die Auswahl von der vorhergehenden Seite, was zu fachlichen Problemen führen könnte.

Sind dabei auf MSCRM-Kings-Blog gestossen. Der Kollege stellt einfach ein, dass 250 Records auf einer Seite dargestellt werden sollen und quätscht das Grid dann einfach mittels CSS auf die Höhe von 5 bzw. X Records zusammen.

Funktioniert in unserem Fall super. Hat jedoch die Limitierung, dass der Kunde auf diesem Wege maximal 250 Records auswählen kann (Limitierung seitens Microsoft für die Darstellung auf einer Seite), bevor das Problem von vorne los geht. Wird in unserem Fall sicher nicht passieren.

Hier der Link zum Blog: http://www.mscrmking.com/2011/07/crm-2011-adding-scrollbars-to-a-sub-grid/#comment-213

Und nun der Code:
[sourcecode language=“javascript“]
//Warning: This code below is not supported by Microsoft

//Place this code at the start of your script

function setSubgridHeight(grdID, noRecordsDisplay, noRecordsPerPage, forceRefresh) {
/// <summary>
/// Causes sub-grid to scroll by setting the number of records to be displayed and
// </summary>
/// <param name="grdID" type="string">
/// ID of sub-grid *required
/// </param>
/// <param name="noRecordsDisplay" type="int">
/// Controls height of sub-grid and how many recors are displayed
/// Before applying scrolling
/// </param>
/// <param name="noRecordsPerPage" type="int">
/// Determines number of records to display per page. If not provided
/// The value defined in the form editor will be used
/// </param>
/// <returns type="nothing" />
if (!IsNull(grdID)) {
var tbl = $("#" + grdID);

//Adjust the sub-grid page size if desired, otherwise this is controlled by the form editor
if (!IsNull(noRecordsPerPage)) {
//Get reference to divGridProps element of desired grid.
//Microsoft stores property infomrmaiton about the sub-grid within this element
var divProps = $("#divGridProps", tbl);
$("#recsPerPage", divProps).attr("value", noRecordsPerPage);
//Controls number of rows returned by data provider and sets the page size for the sub-grid
}

//Get reference to divGridParams element of desired grid.
//Microsoft stores parameter infomrmaiton about the sub-grid within this element
var divParams = $("#divGridParams", tbl);
noRecordsDisplay = (IsNull(noRecordsDisplay) ? "5" : noRecordsDisplay);

//Default to 5 visible records at a time
$("#RecordsPerPage", divParams).attr("value", noRecordsDisplay);

//Controls number of rows displayed in output table
$("#maxrowsbeforescroll", divParams).attr("value", noRecordsDisplay);
//Force scroll bar to display if more records included than desired to display

//Clear all of the empty TR that are added to fill the table height
var tb = $("#" + grdID + "_d").parent().parent();
$("tr", tb).filter(function(index) { return $(this).html() == ""; }).remove();

//Now resize the data area of the grid
$("#" + grdID + "_divDataArea").css("height", ((noRecordsDisplay – 1) * 25) + "px");

//Refresh the grid if desired
if(forceRefresh) {
document.getElementById(grdID).control.refresh();
}
} else {
throw Error.argument("grdID", "grdID is null or undefined");
}

//To use you would write something like
setSubgridHeight(#SUB-GRID ID#, 10, null, false);
[/sourcecode]

Have Fun!

Cheers,
Chris

Leave a reply