Le composant AdvancedDataGrid est-il le seul élément de votre canevas?
Je voudrais redimensionner AdvancedDataGrid à sa hauteur et sa largeur et laisser le Canvas gérer le défilement.
Dans la toile, substituez la méthode updateDisplayList et faire quelque chose comme ceci:
protected function updateDisplayList(unscaledWidth: Number, unscaledHeight: Number):void{
super.updateDisplayList, unscaledHeight);
this.myAdvancedDataGrid.setActualSize(this.myAdvancedDataGrid.measuredHeight, this.myAdvancedDataGrid.measuredWidth);
}
De cette façon, le AdvancedDataGrid ne devrait pas avoir des barres de défilement. Cependant, si elle s'étend trop loin ou trop loin, les barres de défilement apparaîtront dans le canevas. Vous pourriez bénéficier de la lecture sur le Flex Coordinate System. L'AdvancedDataGrid est votre "contenu" tandis que le canevas serait votre locale. J'ajoute un exemple de code de fonctionnement complet pour démo de ma suggestion.
Ceci est le composant de la toile avec un AdvancedDataGrid intérieur: com.flextras.stackOverflow.CanvasWithGrid
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="400" height="300">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth, unscaledHeight);
this.myADG.setActualSize(this.myADG.measuredWidth, this.myADG.measuredWidth);
}
[Bindable]
private var dpFlat:ArrayCollection = new ArrayCollection([
{Region:"Southwest", Territory:"Arizona",
Territory_Rep:"Barbara Jennings", Actual:38865, Estimate:40000},
{Region:"Southwest", Territory:"Arizona",
Territory_Rep:"Dana Binn", Actual:29885, Estimate:30000},
{Region:"Southwest", Territory:"Central California",
Territory_Rep:"Joe Smith", Actual:29134, Estimate:30000},
{Region:"Southwest", Territory:"Nevada",
Territory_Rep:"Bethany Pittman", Actual:52888, Estimate:45000},
{Region:"Southwest", Territory:"Northern California",
Territory_Rep:"Lauren Ipsum", Actual:38805, Estimate:40000},
{Region:"Southwest", Territory:"Northern California",
Territory_Rep:"T.R. Smith", Actual:55498, Estimate:40000},
{Region:"Southwest", Territory:"Southern California",
Territory_Rep:"Alice Treu", Actual:44985, Estimate:45000},
{Region:"Southwest", Territory:"Southern California",
Territory_Rep:"Jane Grove", Actual:44913, Estimate:45000}
]);
]]>
</fx:Script>
<mx:AdvancedDataGrid id="myADG"
initialize="gc.refresh();"> <!-- width="100%" height="100%" -->
<mx:dataProvider>
<mx:GroupingCollection id="gc" source="{dpFlat}">
<mx:grouping>
<mx:Grouping>
<mx:GroupingField name="Region"/>
<mx:GroupingField name="Territory"/>
</mx:Grouping>
</mx:grouping>
</mx:GroupingCollection>
</mx:dataProvider>
<mx:columns>
<mx:AdvancedDataGridColumn dataField="Region"/>
<mx:AdvancedDataGridColumn dataField="Territory"/>
<mx:AdvancedDataGridColumn dataField="Territory_Rep"
headerText="Territory Rep"/>
<mx:AdvancedDataGridColumn dataField="Actual"/>
<mx:AdvancedDataGridColumn dataField="Estimate"/>
</mx:columns>
</mx:AdvancedDataGrid>
</mx:Canvas>
Ceci est le fichier de l'application principale:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:stackOverflow="com.flextras.stackOverflow.*">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<stackOverflow:CanvasWithGrid width="200" height="200" />
</s:Application>
Merci pour la réponse. Quand vous dites que je peux faire glisser tout le chemin vers la droite, c'est un peu le cas. Qu'est-ce qui se passe, pour une raison quelconque, est que la toile est légèrement plus grande que la grille, même si la grille est la seule chose à l'intérieur de la toile! La raison pour laquelle je ne peux pas faire défiler tout le chemin, comme mentionné précédemment, est parce que le Canvas est défilé tout à fait à gauche et la seule façon de faire tout le chemin vers la droite est d'avoir deux barres de défilement ... l'enfer?! Des idées pour lesquelles le Canvas serait plus grand? La largeur et la hauteur des deux éléments sont définies sur 100% – Craig
Il existe probablement un habillage de bordure invisible autour de AdvancedDataGrid. Dans tous les cas, définissez horizontalScrollPolicy = "false" et verticalScrollPolicy = "false" sur votre canevas. Et autant que j'admire www.Flextras.com ailleurs, je ne conseillerais pas suite à sa suggestion de laisser la toile manipulant le défilement ici. Cela irait à l'encontre des optimisations de rendu ADG et de réduire les performances, IMO. – Robusto
Ok, j'ai corrigé le problème que j'avais en plaçant la largeur de la grille de données à "this.width" au lieu de 100% (à l'intérieur du Canvas), maintenant je peux obtenir la fin de la grille. Cela rend la dernière colonne de la grille beaucoup plus grande que le reste des colonnes de la grille maintenant ... des idées là-dessus? AdvancedDataGrid est une terrible chose terrible. – Craig