Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

To adjust primefaces datatable size,live scrolling with screen size

I have a datatable with live scrolling feature. The table fits fine in my development machine but the user of this app has larger screen.It would be good if the datatable fits according to the screen size. Also the height of the datatable should get adjusted with more number of rows for live scroll. Currently I have 15 rows for live scrolling. It would be good if the scroll rows increases with the height of the screen. Please help me in this regard.

My datatable code snippet:

 <h:form id="form">
   <div id="content">
      <h:selectOneMenu id="workspaceOptions" />
      <f:selectItem id="option1" itemLabel="Assignments"
         itemValue="assignment" />

      </h:selectOneMenu>


      <p:dataTable id="workSpaceList" var="data"
         value="#{workSpaceBean.lazylpId}" widgetVar="multiSelection"
         selection="#{workSpaceBean.selectedRows}" resizableColumns="true"
         liveScroll="true" scrollRows="15" scrollWidth="85%"
         scrollHeight="69%" styleClass=".ui-datatable-hor-scroll"
         tableStyle="table-layout:auto;width:100%;" scrollable="true"
         filteredValue="#{workSpaceBean.filteredWorkSpaceItems}">

         <p:ajax event="rowSelect" listener="#{workSpaceBean.onRowSelect}"
            update=":editWrkSp:display" oncomplete="multiDialog.show()" />

         <p:column selectionMode="multiple" style="width:5%" />
            .
            .
            .
            <p:column headerText="Insured" filterBy="#{data.insuredName}"
            sortBy="#{data.insuredName}" style="width:20%">
            <h:outputText value="#{data.insuredName}" />
            <!--   style="width:250px" -->
         </p:column>

         <p:column headerText="City" filterBy="#{data.custAddress_City}"
            sortBy="#{data.custAddress_City}">
            <h:outputText value="#{data.custAddress_City}" />
         </p:column>
      </p:dataTable>
   </div>
   </form>

CSS of the entire page

    body {
    margin: 0px 0px 0px 0px;
    font-family: tahoma;
    font-size: 11px;
    background-color: #E8F0F8;
    height: 100%;
    max-height: 100%;
    overflow: hidden;
}

#header {
    width: 100%;
    height: 90px;
    background-color: #194775;
    position: fixed;
}

#sidepanel {
    width: 180px;
    height: 100%;
    background-color: #D9E6F3;
    margin-top: 90px;
    position: fixed;
    float: left;
    border-right-style: solid;
    border-width: 0.5px;
    border-color: #4A7EBB;

    /* z-index:1; */
}

#logo {
    float: left;
    position: absolute;
    left: 5px;
}

#title {
    position: absolute;
    float: right;
    /* padding-right: 10px;
   padding-bottom:90px; */
    right: 30px;
    top: -25px;
    /* bottom:10px; */
}

.title1 {
    font-family: Agency FB;
    font-size: 32px;
    color: #7F7F7F;
    font-style: bold;
    /* float: right; */
    text-align: left;
    /* padding-right: 10px; */
    font-weight: bold;
    /* padding-bottom:20px; */
}

.accordionMenu .ui-accordion-header a {
    background: #194775;
    color: white;
}

.accordionMenu .ui-accordion-content {
    /* color:#254061!important */
    text-decoration: none;
    background-color: #B9CDE5;
    font-weight: bold;
    padding: 5px 5px;
}

#content {
    position: fixed;
    margin: 90px 0 0 180px;
    width: 100%;
    height: 100%;
    background-color: #E8F0F8;
}

.label {
    display: block;
    font-weight: bold;
    color: #FFFFFF;
    background-color: #194775;
    width: 170px;
    /* text-align:left; */
    padding: 4px 4px 4px 6px;
    text-decoration: none;
    margin-top: 1px;
}

.selectMenu {
    /* float:right; */
    margin-left: 20px;
    margin-top: 15px;
}

.ui-datatable-hor-scroll .ui-datatable-tablewrapper,.scrolling-div .ui-datatable-tablewrapper
    {
    overflow: auto;
    width: 100%;
    height: 100% padding-bottom:    5px;
}

.datatable {
    padding-left: 15px;
    padding-right: 15px;
}

.calendarStyle {
    width: 250px;
}

.ui-corner-top {
    display: none;
}

.ui-chkbox-box ui-widget ui-corner-all ui-state-default {
    /* vertical-align:middle; */
    display: none;
}
like image 954
xdev Avatar asked Dec 13 '13 05:12

xdev


1 Answers

In at least PrimeFaces 5.1, you can define the scrollHeight (and width) as a percentage of the container.

From the docs (emphasis mine):

Scrolling has 3 modes; x, y and x-y scrolling that are defined by scrollHeight and scrollWidth. These two scroll attributes can be defined using integer values indicating fixed pixels or percentages relative to the container dimensions.

See also (5.3 docs and source):

  • http://www.primefaces.org/docs/guide/primefaces_user_guide_5_3.pdf#165
  • https://github.com/primefaces/primefaces/blob/5_3/src/main/resources/META-INF/resources/primefaces/datatable/datatable.js#L612
like image 196
Kukeltje Avatar answered Nov 20 '22 17:11

Kukeltje