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 に答える