【问题标题】:Flex DataGrid not Displaying DataFlex DataGrid 不显示数据
【发布时间】:2010-03-31 21:03:45
【问题描述】:

我有一个自定义的 dataGrid,它更像是一个 2D 列表(如果这有意义的话)。我正在动态创建列并重新创建 dataProvider 以满足我的需要。在调试时,我可以看到我正在创建列并将它们设置为 dataGrid 并创建和设置 dataProvider,但由于某种原因,我能够看到 dataGrid 和列,但看不到数据。

[Bindable]
private var mockData:ArrayCollection = new ArrayCollection([
{value: "425341*"},                     
{value: "425341*"},                                                 
{value: "425341*"},
{value: "425341*"},
{value: "425341*"},                                         
{value: "425341*"},                                             
{value: "425341*"},                                     
{value: "425341*"},                                         
{value: "425341*"}]);

        ...

<TwoDimensionalList 
    width="100%" height="100%"
    numColumns="7" numRows="7"
    dataField="value" 
    dataProvider="{mockData}"/>

来自对象的代码的 sn-p 只包含重要的函数,其他的都不重要(getter、setter 等)。

在调试时,我检查了函数中的所有变量,以确保它们已被分配以及我期望的值。

[片段]

public class TwoDimensionalList extends DataGrid
{

    ...

    /**
    * Creates and sets properties of columns
     */
    private function createColumns():void
    {
        var column:DataGridColumn;
        var cols:Array = this.columns;

        for(var i:uint=0; i < numColumns; i++)
        {
            column = new DataGridColumn("column"+i.toString());
            column.dataField = "column"+i.toString();
            cols[i]=column;
        }

        this.columns = cols;

        // go to the current
        gotoPage(this._currentPageNum);
    }

    /**
     * Sets the data for the dataprovider based on the 
     * number of columns, rows, and page number.
     * 
     * @param pageNum the page number of the data to be viewed in the DataGrids. 
     */
    private function gotoPage(pageNum:uint):void
    {
        _currentPageNum = pageNum;

        var startIndex:uint = (pageNum-1)*numColumns*numRows;

        var data:ArrayCollection = new ArrayCollection();

        for(var i:uint=0; i < numRows; i++)
        {
            var obj:Object = new Object();

            for(var j:uint=0; j < numColumns; j++)
            {
                if((i+(j*numRows)+startIndex) < _dataProvider.length)
                    obj["column"+j.toString()] = String(_dataProvider.getItemAt(i+(j*numRows)+startIndex)["value"]);
            }

            data.addItem(obj);
        }

        this.dataProvider = data;
    }
}

【问题讨论】:

    标签: apache-flex datagrid


    【解决方案1】:

    尝试刷新数据网格:link :)

    您是否尝试过以下命令, 它应该运行更顺畅。

    toolGrid.invalidateList();

    看看 DatagridColumn 类的 dataField 属性。

    【讨论】:

    • 感谢您的帮助,但这些解决方案都没有解决它,不过谢谢
    【解决方案2】:

    问题是我最后设置 dataProvider 时的时间问题。我实现了一个callLater函数来设置dataProvider,问题就解决了。

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 2011-04-09
      • 1970-01-01
      • 2010-10-05
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多