SusDataTable

Таблица данных с toolbar, типизированными ячейками, sort / search / pagination — на SusTableController.
Пакет
SusKit · Данные (коммерческий)
Свойства
| Имя | Тип | По умолчанию | |
|---|---|---|---|
Controller | Prop<SusTableController> | new SusTableController() | v-model |
ShowToolbar | Prop<bool> | true | v-model |
Density | Prop<string> | "default" | v-model |
Variant | Prop<string> | "elevated" | v-model |
Hover | Prop<bool> | true | v-model |
SearchPlaceholder | Prop<string> | "Search..." | v-model |
EmptyText | Prop<string> | "No data available" | v-model |
RowsPerPageLabel | Prop<string> | "Rows per page:" | v-model |
RowsPerPageAutoLabel | Prop<string> | "Rows per page: auto" | v-model |
AllRowsLabel | Prop<string> | "All" | v-model |
Слоты
| Имя |
|---|
toolbar |
События
Хуки стиля
Контракт USS-классов — внешний вид переопределяется без правки C#. Состояния переключаются этими классами:
keyboard-focussus-data-tablesus-data-table__action-btnsus-data-table__cellsus-data-table__cell--actionssus-data-table__cell--align-centersus-data-table__cell--align-endsus-data-table__cell--descriptionsus-data-table__cell--fixed-widthsus-data-table__cell--selectsus-data-table__cell--togglesus-data-table__cell-wrapsus-data-table__emptysus-data-table__empty-framesus-data-table__empty-textsus-data-table__footersus-data-table__footer-btnsus-data-table__footer-infosus-data-table__footer-leftsus-data-table__footer-rightsus-data-table__footer-selectsus-data-table__header-cellsus-data-table__header-cell--sort-wiredsus-data-table__header-cell--sortablesus-data-table__header-titlesus-data-table__header-title--align-centersus-data-table__header-title--align-endsus-data-table__header-title--sortablesus-data-table__hostsus-data-table__host--fixed-heightsus-data-table__loading-barsus-data-table__loading-overlaysus-data-table__radiosus-data-table__radio--disabledsus-data-table__radio--onsus-data-table__radio-dotsus-data-table__row-markersus-data-table__row-marker--onsus-data-table__row-marker--pulsesus-data-table__searchsus-data-table__skeletonsus-data-table__skeleton-barsus-data-table__skeleton-bar--altsus-data-table__skeleton-rowsus-data-table__sort-btnsus-data-table__sort-btn--activesus-data-table__toolbarsus-data-table__toolbar-actionssus-data-table__viewsus-data-table--density-comfortablesus-data-table--density-compactsus-data-table--hoversus-data-table--variant-flatsus-data-table--variant-outlinedsus-healthbarsus-hiddensus-selectsus-select__detailssus-select__fieldsus-select__valuesus-slotsus-table__action-btnsus-table__cell--boxedsus-table__cell--customsus-table__cell--mediasus-table__cell--numbersus-table__cell--progresssus-table__cell--segmentssus-table__cell--togglesus-table__cell--two-linesus-table__cell-subsus-table__cell-titlesus-table__segmentsus-table__segment--onsus-table__segmentssus-table__segments--fullsus-table__segments-countsus-textfieldunity-collection-view__itemunity-collection-view__item--selectedunity-list-view__itemunity-list-view__item--alternatedunity-list-view__item--selectedunity-multi-column-headerunity-multi-column-header__columnunity-multi-column-header__column__sort-indicatorunity-multi-column-header__column-sortingunity-multi-column-header__column-sorting-indicatorunity-multi-column-view__header-container
Использование
Колонки и строки задаются на контроллере (SetColumns / SetItems). Опциональный ApplyKindDefaults применяет пресет SusTableKind.
var ctrl = new SusTableController();
ctrl.ApplyKindDefaults(SusTableKind.MainList);
ctrl.SetColumns(new List<ColumnDef>
{
new() { Key = "Name", Title = "Name", MinWidth = 140f, Sortable = true, Searchable = true },
new() { Key = "Role", Title = "Role", Width = 100f, Sortable = true },
new() { Key = "Level", Title = "Lvl", Width = 72f, Align = "end",
CellType = SusCellType.Number, Sortable = true },
});
ctrl.SetItems(new List<object>
{
new Dictionary<string, object> { ["Name"] = "Aria", ["Role"] = "Tank", ["Level"] = 12 },
new Dictionary<string, object> { ["Name"] = "Borin", ["Role"] = "DPS", ["Level"] = 9 },
});
ctrl.SetItemsPerPage(5);
var table = new SusDataTable();
table.Controller.Value = ctrl;
table.ShowToolbar.Value = true;
table.Density.Value = "default";
table.Variant.Value = "elevated";
table.Hover.Value = true;<template>
<sus:SusDataTable :Controller="TableCtrl.Value"
:ShowToolbar="ShowToolbar.Value"
:Density="Density.Value"
:Variant="Variant.Value"
:Hover="Hover.Value">
<template #toolbar>
<!-- Optional actions next to global search -->
</template>
</sus:SusDataTable>
</template>
<script>
public Prop<SusTableController> TableCtrl = new(new());
public Prop<bool> ShowToolbar = new(true);
public Prop<string> Density = new("default");
public Prop<string> Variant = new("elevated");
public Prop<bool> Hover = new(true);
// Populate TableCtrl columns/items in code (see above).
</script>| Prop | Роль |
|---|---|
Controller | SusTableController — колонки, элементы, сортировка, поиск, страница |
ShowToolbar | Глобальный поиск + слот toolbar |
Density | default · compact · comfortable |
Variant | elevated · flat · outlined |
Hover | Подсветка строки при наведении |
Двухстрочные ячейки
SusHeaders.TwoLine(key, subKey, title) помещает в одну ячейку два значения: значение key — как заголовок, а значение subKey — более приглушённой второй строкой под ним (SusCellType.TwoLine). Подходит для имени, рядом с которым нужен сервер, регион или подзаголовок.
ctrl.SetColumns(new List<ColumnDef>
{
SusHeaders.TwoLine("Name", "World", "Player"),
SusHeaders.Number("Rating"),
});
ctrl.SetItems(new List<object>
{
new Dictionary<string, object> { ["Name"] = "Aria", ["World"] = "North Reach", ["Rating"] = 1840 },
new Dictionary<string, object> { ["Name"] = "Borin", ["World"] = "", ["Rating"] = 1712 },
});- Каждая строка — отдельная метка и обрезается многоточием сама по себе; ни одна строка не переносится, поэтому ячейка никогда не становится выше строки таблицы.
- Rich text выключен на обеих строках, поэтому разметка в ваших данных показывается как обычный текст.
- Сортировка и глобальный поиск используют только значение
key. - Пустая вторая строка получает
sus-hidden, и заголовок остаётся в ячейке один. - Хуки стиля:
sus-table__cell--two-line(ячейка),sus-table__cell-title,sus-table__cell-sub.
Токены таблицы
Размеры обвязки таблицы задают три токена. Задайте их в USS вашего скина или темы:
| Токен | По умолчанию | Что задаёт |
|---|---|---|
--sk-table-header-underlay | transparent | Фон под строкой заголовков. Unity-овский MultiColumnListView закрашивает эту область цветом темы Unity; kit переопределяет её только внутри .sus-data-table, поэтому ваш собственный MultiColumnListView сохраняет тему. |
--sk-table-cell-pad-x | --sk-space-8 | Левый и правый отступ каждой ячейки. По умолчанию следует лестнице density. |
--sk-table-cell-number-pad-x | --sk-table-cell-pad-x | Левый и правый отступ только числовых ячеек. Он добавляется к отступу обёртки ячейки (--sk-table-cell-pad-x, по умолчанию 8 px с каждой стороны), а не заменяет его, поэтому, чтобы короткие числа поместились в узкую колонку, задайте оба токена. |
.my-skin .sus-data-table {
--sk-table-header-underlay: rgba(0, 0, 0, 0.35);
--sk-table-cell-number-pad-x: 2px;
}Числовые ячейки
По умолчанию числовая ячейка сохраняет естественную ширину. Она не сжимается и никогда не показывает многоточие: число шире колонки заходит в отступ ячейки, а не обрезается. Если вашему скину нужно многоточие, добавьте его на тот же селектор:
.my-skin .sus-data-table__cell.sus-table__cell--number {
flex-shrink: 1;
min-width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}Хуки скина для типовых переопределений
Если ваш скин раньше латал таблицу вручную, используйте вместо этого встроенные хуки:
| Самодельный обход | Встроенный хук |
|---|---|
| Метка с rich text, уменьшенной второй строкой и снова включённым переносом | SusHeaders.TwoLine → sus-table__cell-title / sus-table__cell-sub |
| Перекраска серой полосы за заголовком | --sk-table-header-underlay |
| Числа, обрезанные до «2…» в узкой колонке | --sk-table-cell-number-pad-x (для многоточия см. Числовые ячейки) |
Заметки
- Предпочитайте
SusDataTableвместоSusTable, когда нужны toolbar, пресеты kind или типизированные ячейки (SusCellType: text · number · icon · image · toggle · badge · progress · description · two-line · actions). SusTableKind:MainList·Picker·ActionList·ReadOnly·Dev— черезApplyKindDefaults.- Действия над строками / выбор / загрузка задаются на контроллере (
Options,RowActionRequested,Loading, …). - Пустой
Itemsпоказывает встроенное пустое состояние; установитеLoadingдля оверлей-бара. - Известная проблема: пресеты, несущие пресет ширины (
SusHeaders.Number,Icon,Image,Active,Actions,Select), игнорируютWithWidth(...), потому чтоWidthTokenпобеждаетWidth. Для точной ширины сбросьте пресет:var col = SusHeaders.Number("Rating").WithWidth(60f); col.WidthToken = null;.