0

色のブロックを表示するだけの「ColorCell」を作成しました。ただし、これを列に入れると、並べ替えは「1つずつオフ」になります。つまり、ColorCellに続く列は、そのの列を並べ替えます。ColorCellを削除すると、問題が修正されます。何が起こっている?セルとテーブルへの追加のコードは次のとおりです。

colorColumn.setSortable(false);
table.addColumn(colorColumn);
table.setColumnWidth(colorColumn, "16px");

ColumnSortEvent.ListHandler<HasMeasures> columnSortHandler = new ColumnSortEvent.ListHandler<HasMeasures>(
        resultsDataProvider.getList());
table.addColumnSortHandler(columnSortHandler);
... code that adds other columns to sortHandler

public class ColorCell<C> implements Cell<C> {

  interface Template extends SafeHtmlTemplates {
    @Template("<div></div><div>{0}</div>")
    SafeHtml noColorCell(SafeHtml cellContents);

    /**
     * The wrapper around the image vertically aligned to the bottom.
     */
    @Template("<div style=\"width:14px;height:14px;float:left;background-color:{0};\"></div>")
    SafeHtml colorBlockCell(String color);

  }

  /**
   * The default spacing between the icon and the text in pixels.
   */
  private static final int DEFAULT_SPACING = 4;

  private static Template template;



  public ColorCell() {
    this(DEFAULT_SPACING);
  }

  public ColorCell(int spacing) {
    if (template == null) {
      template = GWT.create(Template.class);
    }
  }

  public boolean dependsOnSelection() {
    return false;
  }

  public Set<String> getConsumedEvents() {
    return null;
  }

  public boolean handlesSelection() {
    return false;
  }

  public boolean isEditing(Context context, Element parent, C value) {
    return false;
  }

  public void onBrowserEvent(Context context, Element parent, C value,
      NativeEvent event, ValueUpdater<C> valueUpdater) {
  }

  public void render(Context context, C value, SafeHtmlBuilder sb) {
    String color = getColorUsed(context, value);
    if (color != null) {
      sb.append(template.colorBlockCell(color));
    }

  }

  public boolean resetFocus(Context context, Element parent, C value) {
    return true;
  }

  public void setValue(Context context, Element parent, C value) {
  }

  /**
   * Check if the icon should be used for the value. If the icon should not be
   * used, a placeholder of the same size will be used instead. The default
   * implementations returns true.
   *
   * @param value the value being rendered
   * @return true to use the icon, false to use a placeholder
   */
  protected String getColorUsed(Context context, C value) {
    return null;
  }

  /**
   * Get the parent element of the decorated cell.
   *
   * @param parent the parent of this cell
   * @return the decorated cell's parent
   */
  private Element getCellParent(Element parent) {
    return parent; //.getChild(1).cast();
  }
}
4

1 に答える 1

1

次/前のヘッダーと同じヘッダーでColorCellを追加しますか?これにより、ColorCellのヘッダーがマージされ、collspanが追加されます。私の推測では、次の列の列インデックスが正しくない可能性があります。

于 2012-07-25T15:01:46.683 に答える