1

我正在使用 SmartGWT,并且使用 setData() 调用填充了 ListGridRecords 数组的 ListGrid。我正在尝试更新单个记录的进度属性(在用于测试的计时器上)并让它在浏览器中更新。我尝试了 draw()、redraw()、markForRedraw() 等的各种组合,但无济于事。

我还尝试在我的表类中覆盖 updateRecordComponent() 方法,但它仅在首次创建记录时调用(在 createRecordComponent() 之后)。

我应该注意,我不想通过绑定到 DataSource 来实现这一点。我只想能够更新客户端的属性。

ArrayList<SegmentSortRecord> mRecords;
mRecords.add(new SegmentSortRecord("03312010_M001_S004"));
mRecords.add(new SegmentSortRecord("03312010_M001_S005"));
mRecords.add(new SegmentSortRecord("03312010_M001_S006"));
mRecords.add(new SegmentSortRecord("03312010_M001_S007"));

SegmentSortRecord[] records = new SegmentSortRecord[mRecords.size()];
mRecords.toArray(records);

mSortProgressTable.setData(records);

. . .

mTestTimer = new Timer()
{
   public void run()
   {
      mTestPercent += 5;

      if (mTestPercent <= 100)
      {
         mSortProgressTable.getRecord(2).setAttribute(Constants.PROGRESS_COL_NAME, mTestPercent);
         //mSortProgressTable.markForRedraw();
         //mSortProgressTable.redraw();
      }
      else
      {
         mTestPercent = 0;
      }
   }
};

...

@Override
protected Canvas createRecordComponent(final ListGridRecord aRecord, Integer aColumn)
{
   String fieldName = getFieldName(aColumn);      

   // Want to override the behavior for rendering the "progress" field
   if (fieldName.equals(Constants.PROGRESS_COL_NAME))
   {  
      Progressbar bar = new Progressbar();
      bar.setBreadth(10);
      bar.setLength(100);

      // The JavaScript record object contains attributes that we can
      // access via 'getAttribute' functions.
      bar.setPercentDone(aRecord.getAttributeAsInt(Constants.PROGRESS_COL_NAME));

      return bar;
   }

提前感谢您的帮助。

4

3 回答 3

1

我解决了动态更新:

grid.getRecord(i).setAttribute(name, value);
grid.refreshRow(i);

分别

grid.refreshCell(i, j);
于 2011-09-12T19:14:58.890 回答
0

ListGrid 有一个 updateData 方法,您可以在其中传递一条记录。你试过了吗?

于 2010-04-21T18:56:45.613 回答
0

一种直率且不是非常高性能的方法是简单地使用 setData 或 setRecords 再次设置您的记录数组

grid.setData(recordArr);

我在我的应用程序中使用它,但这只是因为所有记录都已更新。

顺便说一句:您可以设置客户端数据源

dataSource.setClientOnly(true);
dataSource.setTestData(...);
于 2010-04-22T22:08:56.473 回答