12
votes

Largeurs de colonne de données riches étendues

J'ai un problème avec Richfaces étendus de DataTable

si les colonnes sont plus disées 20, au lieu de donner une barre de défilement horizontale, les colonnes sont comprimées.

J'ai essayé de donner une largeur de colonne en%, PX .Mais sans usage.

Quelqu'un est familier avec cela? xxx


2 commentaires

"10%">


FYI: Comment publier le code: Stackoverflow.com/editing-help


5 Réponses :


5
votes

Vous devez spécifier la largeur sans "px" ou "%", par exemple

<rich:column label="Select" sortable="false" width="100">


5 commentaires

J'ai donné

<< Rich: étenduedatatable largeur = "1500px" ... La largeur de la colonne est accroître. BROSWSER ScrollBar va également avec Div ScrollBar


Prise plus de largeur que "300">


Vous devez regarder le HTML qui est produit. Publiez une version supprimée de celle-ci (c'est-à-dire sans tout le JavaScript) comme édition de votre question initiale.


Oh et vous stockez votre état de table n'importe où? Une des belles caractéristiques d'extensiondatables est qu'il peut persister les largeurs de colonne, etc.


+1 @Abishek Si vous ne spécifiez pas les unités, les valeurs de largeur seront ignorées. Ajouter PX pour les largeurs.



12
votes

code> ne gère vraiment pas très bien les défilements horizontaux. En fait, il semble que les développeurs déterminés à défilement horizontal à côté impossible.

Vous pouvez mettre code> dans un

code> avec horizontale Le défilement est activé, mais cela ne fonctionnera pas si vous le laissez à cela. Un des
code> S dans code> ( div.extdt-innerdiv code>) est absolument positionné, le retirer de la Flux du document. P>

Pour référence, il s'agit de la structure de sortie de base de code>, en supposant trois code> éléments Avec une largeur de 100 px et deux enregistrements: p> xxx pré>

Vous pouvez ajouter défilement horizontal à div.extdt-innerdiv code>, mais Code> Colonne de la colonne de la colonne ( extenduedatatable.dataTable_formid_edtid.calculatthsfromratios () code>) est essentiellement confus par cela, redimensionnant toutes les colonnes qui commencent après le composant maxwidth code > (dérivé de la largeur initiale de div.extdt-maindiv code>) à 20px large large. p>

J'ai essayé ... p>

  • Emballage code> avec un
    code> élément et paramètre ce qui suit:
    • position: relatif; code> li>
    • largeur: 100%; code> li>
    • Overflow-X: auto; code> li>
    • une hauteur souhaitée, sinon vous verrez simplement des barres de défilement en raison du prochain point balle. Li> ul> li>
    • faisant div.extdt-maindiviv code> absolument positionné li>
    • donnant les deux div.extdt-outerdiv code> et div.extdt-innerdiv code> positionnement statique et largeur automatique li> ul>

      ... Mais cela ne semble avoir aucun effet. P>

      Je pense que cela peut être dû au fait que je fais la plupart de ces changements de Firebug et maindiv.getwidth () code> (de Calculatwidthsfromratios () code>) récupère une valeur mise en cache, maindiv.Element.boxwidth code>. Cette valeur est définie dans clientui.common.box.box.sewidth () code> (common-défilable-data-table-table.js), et il est appelé une seule fois; Il n'est plus appelé si je redimense la fenêtre du navigateur (le code> dans mon cas a 100% largeur). p>

      Je vais essayer de faire ces changements dans mon Fichier CSS pour voir si tout fonctionne comme magiquement fonctionne. Le JavaScript pour Code> est assez complexe, cependant, et il n'est pas documenté, alors je pourrais manquer quelque chose quelque part. Je ferai un suivi avec mes résultats. P>


      EDIT STROR>: Après avoir apporté les modifications dans mon CSS, j'ai toujours connu le problème de raccourcissement de la colonne. P> Donc, pour éviter d'avoir à créer un wrapper div, j'ai ajouté défilement horizontal à div.extdt-innerdiv code>: p> xxx pré>

      alors, dans le pied de page du code>, j'ai désactivé le Calculatthsfromratios () code> Fonction: p>

      <rich:extendedDataTable id="edtId">
          <!-- rest of extended data table -->
          <f:facet name="footer">
              <script type="text/javascript">
                  jQuery(function() {
                      // Disable ratio-based column resizing.
                      ExtendedDataTable.DataTable_formId_edtId.calculateWidthsFromRatios = function() {};
                  });
              </script>
          </f:facet>
      </rich:extendedDataTable>
      


0 commentaires

0
votes

Pour activer la barre de défilement horizontal Voir le contournement ici https://jira.jboss.org/ Jira / Browse / RF-4871 .

Pour que les colonnes redimensionnables lorsque vous affichez la barre de défilement horizontal, voir cette http: //community.jboss. org / message / 518878 # 518878 .


0 commentaires

3
votes

J'ai combiné toutes sortes d'idées et j'ai proposé ce qui suit:

Il y a - comme mentionné - aux choses à réparer. L'une est la défrolabilité au-delà de 100% de la largeur de table et le second est la barre de défilement elle-même. Donc, je vais avoir un fichier JS pour corriger le problème de redimensionnement et certains CSS pour ajouter la barre de défilement ... p>

page.xhtml em> - votre page avec une partie étendue-dt À l'intérieur. P>

 ExtendedDataTable.DataTable.header.prototype.OnSepMouseMove = function(event) {
      if(this.dragColumnInfo && this.dragColumnInfo.mouseDown) {
           if(!this.dragColumnInfo.dragStarted) {
                this.dragColumnInfo.dragStarted = true;
                this._showSplitter(this.dragColumnInfo.srcElement.columnIndex);
           }
           var delta = Event.pointerX(event) - 
                this.dragColumnInfo.startX
           if (delta < this.minDelta) {
                delta = this.minDelta;
           }
           /*if (delta > this.maxDelta) {
                delta = this.maxDelta;
           }*/
           var x = this.dragColumnInfo.originalX + delta;
           var finalX = x - this.minColumnWidth - 6 //6 stands for sep span width;
           this.columnSplitter.moveToX(finalX);                     
           Event.stop(event);
      }
 }

 ExtendedDataTable.DataTable.header.prototype.OnSepMouseUp = function(event) {
      Event.stop(event);
      Event.stopObserving(document, 'mousemove', this.eventSepMouseMove);
      Event.stopObserving(document, 'mouseup', this.eventSepMouseUp);
      if(this.dragColumnInfo && this.dragColumnInfo.dragStarted) {
           this.dragColumnInfo.dragStarted = false;
           this.dragColumnInfo.mouseDown = false;

           var delta = Event.pointerX(event) - 
                this.dragColumnInfo.startX;
           if (delta < this.minDelta) {
                delta = this.minDelta;
           }
           /*if (delta > this.maxDelta) {
                delta = this.maxDelta;
           }*/
           var columnIndex = this.dragColumnInfo.srcElement.columnIndex;
           var newWidth = this.getColumnWidth(columnIndex) + delta;

           this.extDt.setColumnWidth(columnIndex, newWidth);
           this.setColumnWidth(columnIndex,newWidth);
           this.extDt.updateLayout();
           if (this.extDt.onColumnResize){
                //set properly value to this.columnWidths
                this.extDt.columnWidths = "";
                for (i=0; i<this.columnsNumber; i++){
                     this.extDt.columnWidths += "" + this.getColumnWidth(i) + ";";
                }//for
                this.extDt.onColumnResize(event, this.extDt.columnWidths);
           }
      }
      this._hideSplitter();
 }

ExtendedDataTable.DataTable.prototype.calculateWidthsFromRatios = function() {
    LOG.debug('firing calculateWidthsFromRatios');
    var c = this.getColumns();
    var scrollbarWidth = this.getScrollbarWidth();
    this._scrollbarWidth = scrollbarWidth;
    LOG.debug('Scrollbar: ' + scrollbarWidth);
    var mainDivWidth = this.mainDiv.getWidth();
    LOG.debug('Main DIV: ' + mainDivWidth);
    var maxWidth = mainDivWidth - scrollbarWidth;
    LOG.debug('Width to spread: ' + maxWidth);
    var totalWidth = 0;
    for (i = 0; i < c.length - 1; i++) {
        LOG.debug('Column[' + i + '] ratio: ' + this.ratios[i]);
        var w = Math.round(this.ratios[i] * maxWidth);
        if (w < parseInt(this.minColumnWidth)) {
            w = parseInt(this.minColumnWidth);
        }
        LOG.debug('setting column ' + i + ' to width: ' + w);
        this.setColumnWidth(i, w);
        this.header.setColumnWidth(i, w);
        totalWidth += w;
    }
    /*
     * if (totalWidth > maxWidth) {
     * c[c.length - 2].width -= (totalWidth - maxWidth);
     * }
     */
};


0 commentaires

0
votes

Selon cet exemple ici:

Richfaces Showcase

La largeur est utilisée de cette façon (cochez la source du XHTML): xxx

pour moi, il fonctionnait sans problème.

Salutations.


0 commentaires