【问题标题】:How can I disable column auto-width feature in Clarity Datagrid?如何在 Clarity Datagrid 中禁用列自动宽度功能?
【发布时间】:2020-02-10 12:05:50
【问题描述】:

我需要在 Angular 中动态构建 Clarity Datagrid 的列。我就是这样做的:

我有一个数组columnsDef,其中包含我需要显示的字段的定义,如下所示:

columnsDef = [
{id:'id', label:'ID'},
{id:'client', label:'Client/Prospect'},
...
]

和另一个变量backlog 保存要在网格中显示的实际数据。

然后,在我的 html 模板中,我有以下代码来定义列标题和单元格:

<clr-datagrid>
  <clr-dg-column *ngFor="let def of columnsDef" [clrDgField]="def.id">
     {{ def.label }}
  </clr-dg-column>

  <clr-dg-row *clrDgItems="let request of backlog" [clrDgItem]="request">
      <clr-dg-cell *ngFor="let def of columnsDef">
          {{ request[def.id] }}
      </clr-dg-cell>
  </clr-dg-row>
</clr-datagrid>

这实际上是“有效的”,但列对齐完全搞砸了。这些值不在其标题下方,并且单元格宽度因行而异。

(抱歉,我不得不像素化一些机密数据)

我该如何解决这个问题?

【问题讨论】:

  • 您可以将具有特定 width 的样式应用于列 - 您可能必须对 clr-dg-column 和对应的 clr-dg-cell 使用相同的值
  • 我试过了,只要用户不调整一个标题的大小,它就可以工作。发生这种情况时,所有列都会回到它们“奇怪”的尺寸。我想这与数据网格自动宽度功能有关。
  • 我猜你必须为所有列固定宽度,并为具有很长值的列使用某种自动换行。

标签: datagrid vmware-clarity


【解决方案1】:

由于生命周期的性质,动态列不会获得计算宽度,内容不会及时呈现以了解大小,因此它们会获得默认宽度。如果您在每一列上放置[style.width.px]="100" 绑定,默认情况下将轻松选择该大小。

我推荐的另一个选项是定义所有列,然后动态隐藏不需要的列。这意味着数据网格完全知道该表,并且计算应该更好。

    <clr-dg-column>
        <ng-container *clrDgHideableColumn="{hidden: isColumnHidden}">
            Column Name
        </ng-container>
    </clr-dg-column>

在某些情况下,这可能没有意义(因为有时列根本不可用)。在这些情况下,我通常建议为每种情况定义一个不同的 Datagrid,而不是总是尝试动态构建一个。它使 Datagrid 的内容更加明确和声明,并且呈现更加清晰。

【讨论】:

  • 使用 clrDgHideableColumn 听起来是个好主意,但不幸的是似乎不起作用。问题是网格的结构是从 Web 服务中检索的,因此在解决对 API 的调用之前,网格不知道自己的结构。最初使用 [style.width.px]="100" 有效,但是当用户调整一列的大小时,所有宽度都被错误地重新计算有没有办法取消激活自动宽度?
  • 我按照您关于数据网格生命周期的提示(并且还检查了源代码:-p)并找到了解决方法。在 datagrid 元素上使用 *ngIf="gridDefinitionIsLoaded === true" 可以解决问题,因为直到所有数据都可用后才真正呈现网格。如果是,网格生命周期可以正确计算宽度。它不漂亮,但它可以工作......现在......
  • 如果您异步加载值,这将延迟,因此这是一个可行的解决方法。
  • 是的,这是一种解决方法。不过,我很高兴有一个更优雅的解决方案。就像,能够按需执行“计算列”功能,而不仅仅是在 ngAfterViewInit 上,或者禁用它,或者禁用列调整大小。那太好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
相关资源
最近更新 更多