Ich möchte die DataGrid-Komponente so erweitern, dass es eine (schreibgeschützte) Spalte für die Zeilennummer gibt, wie man sie in Tabellenkalkulationen sieht. Ich bin auf diesen Artikel gestoßen http://www.cflex.net/showFileDetails.cfm?ObjectID=735 aber es hängt davon ab, dass die Daten für jede Zeile eindeutig sind, so dass es in das Array indizieren kann. Wenn die Daten nicht eindeutig sind (wie bei einem leeren Raster), funktioniert es nicht. Wie kann ich das implementieren?
Antworten
Zu viele Anzeigen?
Matt
Punkte
21
Das hat bei mir funktioniert:
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.controls.AdvancedDataGrid;
private var handleDataChangedEnabled:Boolean = false;
override public function set data(value:Object):void {
super.data = value;
if (!handleDataChangedEnabled) {
addEventListener("dataChange", handleDataChanged);
}
}
public function handleDataChanged(event:Event):void {
this.text = String(listData.rowIndex + (listData.owner as AdvancedDataGrid).verticalScrollPosition + 1);
}
]]>
</mx:Script>
Natürlich müssten Sie AdvancedDataGrid in DataGrid ändern.
Zum Wohl.
acromm
Punkte
850
Freddie Zero
Punkte
1
Verwenden Sie einfach diese Klasse als Ihren itemRenderer: RowNumColumnRenderer.as
package
{
import mx.collections.IList;
import mx.controls.AdvancedDataGrid;
import mx.controls.Label;
import mx.controls.listClasses.ListBase;
public class RowNumColumnRenderer extends Label
{
override public function set data(value:Object):void
{
super.data = value;
if (listData != null)
this.text = (AdvancedDataGrid(listData.owner).itemRendererToIndex(this) + 1).toString();
}
}
}
Ich konnte dies durch die Implementierung eines benutzerdefinierten itemRenderer, RowNumberRenderer.as, erreichen
package com.domain
{
import mx.collections.IList;
import mx.controls.Label;
import mx.controls.listClasses.ListBase;
public class RowNumberRenderer extends Label
{
public function RowNumberRenderer()
{
super();
}
override public function set data(value:Object):void
{
super.data = value;
this.text = String(IList(ListBase(listData.owner).dataProvider).getItemIndex(data) + 1);
}
}
}
Alex Lee
Punkte
1
Wie wäre es mit folgendem:
RendererRowIndexPlusOne.as
package
{
import mx.controls.Label;
import mx.utils.StringUtil;
import mx.utils.ObjectUtil;
public class RendererRowIndexPlusOne extends Label
{
public override function set data(item:Object):void {
super.data = item;
trace('listData.label ' + listData.label);
trace('listData.rowIndex ' + listData.rowIndex);
trace('listData.columnIndex ' + listData.columnIndex);
trace('listData.owner ' + listData.owner);
text = String(listData.rowIndex + 1);
}
}
}