将动态创建的DataGrid添加为子级或元素是无效的



我正在尝试在AS3中开发一个应用程序。我真正想实现的是只有一个数据网格,并让它显示,比如说,三组不同的数据。(实际计数将动态变化,这无关紧要,因为问题与此无关)是的,它必须只有一个数据网格,因为你知道,我需要一个紧凑的接口。

类";Sonuc";有三个属性,它们是构造函数输入的字符串版本。典型的";Sonuc";物体是这样的。

var sonuc1:Sonuc = new Sonuc(1,1,false);
//sonuc1.num = "1"
//sonuc1.type = "1"
//sonuc1.isTrue = "No"

我之所以通知你";Sonuc";课堂是我想让你知道,课堂并不是太复杂的东西。x.mxml是测试mxml,在这里我只加载用于测试目的的类。

这是我迄今为止编码的

public class ResultInterface extends UIComponent
{

private const desiredWidth:int = 250;
private const desiredHeight:int = 150;

private const sonuc1:Sonuc = new Sonuc(1,1,false);

public var tablo:DataGrid = new DataGrid();
public var kolonArray:Array = new Array ();
public var sonucArray:Array = new Array ();
public var currentIndex:int = new int ();
public var prevButon:Button = new Button();
public var nextButon:Button = new Button();


public function ResultInterface():void
{

currentIndex = 0;

super();

tablo = new DataGrid();

width=desiredWidth+40;
height=desiredHeight+60;

this.tablo.width = desiredWidth;
this.tablo.height = desiredHeight;
this.tablo.x = 20;
this.tablo.y = 40;

prevButon.x = 10;
prevButon.y = genislik/2 - 10;
prevButon.width = 
prevButon.height = 10; 

nextButon.x = genislik +20;
nextButon.y = genislik/2 -10;
nextButon.width =
nextButon.height = 10;

var referansColl:ArrayCollection = new ArrayCollection();

sonucArray.push(referansColl);

tablo.dataProvider = sonucArray[currentIndex];

var sampleCol:DataGridColumn = new DataGridColumn();
sampleCol.dataField = "num";
sampleCol.headerText = "Number";

var sampleCol2:DataGridColumn = new DataGridColumn();
sampleCol2.dataField = "type";
sampleCol2.headerText = "Type";

var sampleCol3:DataGridColumn = new DataGridColumn();
sampleCol3.dataField = "isTrue";
sampleCol3.headerText = "Is it true?";

kolonArray.push(sampleCol,sampleCol2,sampleCol3);
tablo.columns = kolonArray;


this.addElement(tablo); //**** this is the problematic line
this.addChild(oncekiButon);
this.addChild(sonrakiButon);

}

public function getNewSonuc(incoming:Sonuc):void
{
sonucArray[currentIndex].addItem(incoming);
}

public function newTablo():void
{
var newTablo:ArrayCollection = new ArrayCollection();
currentIndex = sonucArray.push(newTablo);
}

public function prev(evt:Event):void //I haven't written event listeners yet
{
if(currentIndex > 0)
currentIndex--;

nextButon.enabled = true;

if(currentIndex == 0)
prevButon.enabled = false;
}

public function birSonrakine(evt:Event):void
{
if(currentIndex < sonucArray.length)
currentIndex++;

prevButon.enabled = true;

if(currentIndex == sonucArray.length)
nextButon.enabled = false;
}

在这个版本中,我得到一个语法错误";调用可能未定义的方法addElement";我还尝试将基类设置为";"雪碧";以及";画布";

当我使用addChild而不是addElement时,我会得到运行时错误";addChild对此类不可用";

当我刚刚评论有问题的行out时,除了数据网格本身之外,所有内容都加载得很完美。

请注意,在将某些数据(Sonuc)发送到数据网格之前会发生错误。

当我尝试使用canvas和addelement时;无法访问null对象引用"的属性或方法;带有一些奇怪的函数、类和包。

1009:无法访问null对象引用的属性或方法

at mx.styles::StyleProtoChain$/initProtoChainForUIComponentStyleName()[E:dev4.yframeworksprojectsframeworksrcmxstylesStyleProtoChain.as:358]
at mx.styles::StyleProtoChain$/initProtoChain()[E:dev4.yframeworksprojectsframeworksrcmxstylesStyleProtoChain.as:171]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:10926]
at mx.core::UIComponent/regenerateStyleCache()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:10989]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7465]
at mx.core::UIComponent/addChild()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7162]
at mx.controls.listClasses::ListBase/createChildren()[E:dev4.yframeworksprojectsmxsrcmxcontrolslistClassesListBase.as:3772]
at mx.controls::DataGrid/createChildren()[E:dev4.yframeworksprojectsmxsrcmxcontrolsDataGrid.as:1143]
at mx.core::UIComponent/initialize()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7634]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::childAdded()[E:dev4.yframeworksprojectsframeworksrcmxcoreUIComponent.as:7495]
at mx.core::Container/http://www.adobe.com/2006/flex/mx/internal::childAdded()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:3974]
at mx.core::Container/addChildAt()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:2618]
at mx.core::Container/addChild()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:2534]
at mx.core::Container/addElement()[E:dev4.yframeworksprojectsmxsrcmxcoreContainer.as:2981]
at genel.siniflar::ResultInterfaceArayuz()[C:UsersEgeAdobe Flash Builderbrainswift2srcgenelsiniflarResultInterface.as:95]
at x()[C:UsersEgeAdobe Flash Builderbrainswift2srcx.mxml:27]
at _x_mx_managers_SystemManager/create()[_x_mx_managers_SystemManager.as:54]
at mx.managers.systemClasses::ChildManager/initializeTopLevelWindow()[E:dev4.yframeworksprojectsframeworksrcmxmanagerssystemClassesChildManager.as:311]
at mx.managers::SystemManager/initializeTopLevelWindow()[E:dev4.yframeworksprojectsframeworksrcmxmanagersSystemManager.as:3057]
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::kickOff()[E:dev4.yframeworksprojectsframeworksrcmxmanagersSystemManager.as:2843]
at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::preloader_completeHandler()[E:dev4.yframeworksprojectsframeworksrcmxmanagersSystemManager.as:2723]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.preloaders::Preloader/timerHandler()[E:dev4.yframeworksprojectsframeworksrcmxpreloadersPreloader.as:542]
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

我真的需要你的帮助,伙计们,请尽快回答。

好吧,我试着从构造函数外部调用"addElement",它成功了。然而,我不知道是什么原因导致了这个错误,我知道我的解决方案不是合法的。我想学习解决这个问题的正确方法。

更改resultInterface.as

// this.addElement(tablo); **** this is the problematic line, we have commented it out
this.addChild(oncekiButon);
this.addChild(sonrakiButon);

更改为x.mxml

public function onCreationComplete(evt:Event):void
{
showResult.addElement(showResult.tablo);
addElement(showResult);
}

最新更新