DataGrid – Frozen Spalten & Sticky Header
Zeigt wie Spalten links fixiert (Frozen="true") und der Header beim vertikalen Scrollen fixiert werden (MaxHeight).
Sticky Header
Der Header bleibt beim vertikalen Scrollen sichtbar – MaxHeight="220px" am DataGrid setzen
Bestellnr. | Kunde | Betrag (€) | Datum |
|---|---|---|---|
| BE-2025-001 | Müller GmbH | 1.240,00 | 01.06.2025 |
| BE-2025-002 | Wagner & Partner KG | 890,50 | 03.06.2025 |
| BE-2025-003 | Schneider Handels AG | 3.120,00 | 05.06.2025 |
| BE-2025-004 | Fischer Logistik | 456,00 | 08.06.2025 |
| BE-2025-005 | Weber Technik | 2.050,00 | 10.06.2025 |
| BE-2025-006 | Becker Elektronik GmbH | 3.780,00 | 12.06.2025 |
| BE-2025-007 | Hoffmann Versand | 220,00 | 14.06.2025 |
| BE-2025-008 | Koch Industrie AG | 1.650,00 | 16.06.2025 |
| BE-2025-009 | Bauer & Söhne KG | 980,00 | 18.06.2025 |
| BE-2025-010 | Richter Consulting | 540,00 | 20.06.2025 |
| BE-2025-011 | Klein Medizintechnik | 4.200,00 | 22.06.2025 |
| BE-2025-012 | Wolf & Partner | 310,00 | 24.06.2025 |
Frozen Spalten (links fixiert)
Die ersten zwei Spalten bleiben beim horizontalen Scrollen sichtbar – Frozen="true" pro Spalte setzen
# | Bezeichnung | Kategorie | Betrag (€) | Währung | Datum | Konto | Referenz | Notiz |
|---|---|---|---|---|---|---|---|---|
| 1 | Servermiete Q3 | IT | 1.200,00 | EUR | 01.07.2025 | 1200-IT-Infrastruktur | REF-2025-001 | – |
| 2 | Büromaterial | Verwaltung | 89,40 | EUR | 03.07.2025 | 6800-Bürokosten | REF-2025-002 | Nachbestellung |
| 3 | Reisekosten München | Vertrieb | 340,00 | EUR | 05.07.2025 | 6320-Reisekosten | REF-2025-003 | – |
| 4 | Lizenz Jira | IT | 480,00 | USD | 08.07.2025 | 6850-Softwarelizenzen | REF-2025-004 | Jahresabo |
| 5 | Kantine Monatsabo | Allgemein | 210,00 | EUR | 10.07.2025 | 6600-Personalkosten | REF-2025-005 | – |
| 6 | Domain-Verlängerung | IT | 15,00 | EUR | 12.07.2025 | 6850-Softwarelizenzen | REF-2025-006 | 2 Jahre |
| 7 | Messestand Köln | Marketing | 3.800,00 | EUR | 15.07.2025 | 6400-Werbung | REF-2025-007 | – |
| 8 | Cloud-Backup | IT | 120,00 | EUR | 18.07.2025 | 1200-IT-Infrastruktur | REF-2025-008 | – |
| 9 | Telefonanlage | IT | 220,00 | EUR | 19.07.2025 | 1200-IT-Infrastruktur | REF-2025-009 | – |
| 10 | Reinigungsservice | Allgemein | 480,00 | EUR | 20.07.2025 | 6600-Personalkosten | REF-2025-010 | Monatspauschale |
| 11 | Laptop Entwickler | IT | 1.499,00 | EUR | 21.07.2025 | 0650-Hardware | REF-2025-011 | – |
| 12 | Schulung Azure | IT | 890,00 | EUR | 22.07.2025 | 6820-Weiterbildung | REF-2025-012 | 2 Tage |
Frozen Spalten + Sticky Header kombiniert
Beide Features gleichzeitig: Frozen="true" + MaxHeight="240px"
# | Bezeichnung | Kategorie | Betrag (€) | Währung | Datum | Konto | Referenz | Notiz |
|---|---|---|---|---|---|---|---|---|
| 1 | Servermiete Q3 | IT | 1.200,00 | EUR | 01.07.2025 | 1200-IT-Infrastruktur | REF-2025-001 | – |
| 2 | Büromaterial | Verwaltung | 89,40 | EUR | 03.07.2025 | 6800-Bürokosten | REF-2025-002 | Nachbestellung |
| 3 | Reisekosten München | Vertrieb | 340,00 | EUR | 05.07.2025 | 6320-Reisekosten | REF-2025-003 | – |
| 4 | Lizenz Jira | IT | 480,00 | USD | 08.07.2025 | 6850-Softwarelizenzen | REF-2025-004 | Jahresabo |
| 5 | Kantine Monatsabo | Allgemein | 210,00 | EUR | 10.07.2025 | 6600-Personalkosten | REF-2025-005 | – |
| 6 | Domain-Verlängerung | IT | 15,00 | EUR | 12.07.2025 | 6850-Softwarelizenzen | REF-2025-006 | 2 Jahre |
| 7 | Messestand Köln | Marketing | 3.800,00 | EUR | 15.07.2025 | 6400-Werbung | REF-2025-007 | – |
| 8 | Cloud-Backup | IT | 120,00 | EUR | 18.07.2025 | 1200-IT-Infrastruktur | REF-2025-008 | – |
| 9 | Telefonanlage | IT | 220,00 | EUR | 19.07.2025 | 1200-IT-Infrastruktur | REF-2025-009 | – |
| 10 | Reinigungsservice | Allgemein | 480,00 | EUR | 20.07.2025 | 6600-Personalkosten | REF-2025-010 | Monatspauschale |
| 11 | Laptop Entwickler | IT | 1.499,00 | EUR | 21.07.2025 | 0650-Hardware | REF-2025-011 | – |
| 12 | Schulung Azure | IT | 890,00 | EUR | 22.07.2025 | 6820-Weiterbildung | REF-2025-012 | 2 Tage |
SKILL.md – Datagrid
---
name: DataGrid
description: Onesown Blazor Komponente DataGrid (DataGrid). Verwende diesen Skill wenn du die DataGrid-Komponente verwenden, konfigurieren oder debuggen moechtest.
---
# DataGrid
**Namespace:** `Onesown.Blazor.Components`
**Kategorie:** DataGrid
**Basisklasse:** `OoComponentBase`
**Generisch:** Ja (`DataGrid<TItem>` o.ae.)
Generisches, vollständig serverseitig-kompatibles DataGrid für tabellarische Daten. Unterstützt Spalten-Definition per DataGridColumn-Kindkomponenten, Sortierung (clientseitig und serverseitig), Paging, Freitext-Suche, Spalten-Filter, Einzel- und Mehrfach-Selektion, State-Persistenz via SessionStorage und fixierte (frozen) Spalten.
**Live-Demo:** https://components.schini.com/demo/datagrid
## Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| ``Items`` | ``IEnumerable<TItem>`` | | Datenquelle als In-Memory-Liste. Bei gleichzeitiger Angabe von QueryableItems wird QueryableItems bevorzugt. |
| ``QueryableItems`` | ``IQueryable<TItem>`` | | Datenquelle als IQueryable für serverseitige Sortierung und Filterung. Hat Vorrang vor Items. |
| ``EmptyText`` | ``string`` | ``"Keine Daten vorhanden."`` | Anzeigetext wenn die Datenquelle leer ist. Standard: "Keine Daten vorhanden." |
| ``IsBusy`` | ``bool`` | | Zeigt einen Lade-Indikator über der Tabelle und blendet den Inhalt aus, solange true. |
| ``ShowGridLines`` | ``bool`` | ``true`` | Zeigt Rasterlinien zwischen allen Zellen. Standard: true. |
| ``Striped`` | ``bool`` | ``true`` | Hebt jede zweite Zeile farblich hervor (Zebra-Streifen) für bessere Lesbarkeit. Standard: true. |
| ``Hover`` | ``bool`` | ``true`` | Hebt die Zeile unter dem Mauszeiger visuell hervor. Standard: true. |
| ``MaxHeight`` | ``string`` | | Begrenzt die Höhe des Tabellenbereichs (z. B. "400px" oder "60vh"). Wenn gesetzt, wird der Grid-Bereich scrollbar und der Tabellen-Header bleibt beim Scrollen oben fixiert (sticky). |
| ``Columns`` | ``RenderFragment`` | | RenderFragment für die Spalten-Definitionen. Befüllt durch untergeordnete DataGridColumn-Komponenten. |
| ``Filterable`` | ``bool`` | ``false`` | Aktiviert Spalten-Filter-Eingaben in der Header-Zeile für alle filterbaren Spalten. Standard: false. |
| ``ToolbarContent`` | ``RenderFragment`` | | Optionaler Inhalt der rechts über der Tabelle eingeblendet wird (z. B. Export-Buttons oder Aktions-Icons). Wird nur gerendert wenn gesetzt. |
| ``ExportFileName`` | ``string`` | ``"export"`` | Dateiname ohne Erweiterung für den CSV-Download via Export-Button. Standard: "export". |
| ``OnSortChanged`` | ``EventCallback<SortChangedEventArgs<TItem>>`` | | Wird ausgelöst wenn der Nutzer eine Spalten-Überschrift zum Sortieren anklickt. Liefert Property (Spaltenname) und Direction für eigene serverseitige Sortierlogik. |
| ``SearchText`` | ``string`` | | Freitext-Suchwert von außen. Jede Änderung löst automatisch eine neue Abfrage aus und setzt auf Seite 1 zurück. Unterstützt @bind-SearchText. |
| ``SearchTextChanged`` | ``EventCallback<string>`` | | EventCallback für @bind-SearchText. |
| ``OnSearchStarted`` | ``EventCallback`` | | Wird unmittelbar vor dem Start einer neuen Abfrage ausgelöst (z. B. um einen globalen LoadingBar einzublenden). |
| ``OnSearchCompleted`` | ``EventCallback`` | | Wird nach Abschluss einer Abfrage ausgelöst (z. B. um einen globalen LoadingBar auszublenden). |
| ``Page`` | ``int`` | ``1`` | Aktuell angezeigte Seite (1-basiert). Unterstützt @bind-Page für externe Steuerung. Standard: 1. |
| ``PageChanged`` | ``EventCallback<int>`` | | EventCallback für @bind-Page. |
| ``PageSize`` | ``int`` | ``20`` | Anzahl der Einträge pro Seite. Standard: 20. |
| ``PageSizeChanged`` | ``EventCallback<int>`` | | EventCallback für @bind-PageSize. |
| ``PageSizeOptions`` | ``int[]`` | ``new[] { 10, 20, 50, 100 }`` | Auswahlmöglichkeiten für die Seitengröße im Pager-Dropdown. Standard: 10, 20, 50, 100. |
| ``ShowPager`` | ``bool`` | ``true`` | Blendet den gesamten Pager (Seitenanzeige + Navigation) aus wenn false. Standard: true. |
| ``ShowPagerControls`` | ``bool`` | ``true`` | Blendet Navigations-Pfeile und Seitengrößen-Dropdown aus; zeigt nur den Info-Text. Standard: true. |
| ``TotalCount`` | ``int?`` | | Gesamtanzahl aller Datensätze für serverseitige Szenarien (IQueryable). Wenn gesetzt, wird dieser Wert für die Seitenberechnung verwendet. |
| ``SelectionMode`` | ``OoSelectionMode`` | ``OoSelectionMode.None`` | Selektionsmodus. None deaktiviert die Auswahl (Standard), Single erlaubt genau eine Zeile, Multiple erlaubt beliebig viele Zeilen. |
| ``SelectedItem`` | ``TItem`` | | Die aktuell selektierte Zeile im Einzel-Modus. Unterstützt @bind-SelectedItem. |
| ``SelectedItemChanged`` | ``EventCallback<TItem>`` | | EventCallback für @bind-SelectedItem. |
| ``SelectedItems`` | ``IList<TItem>`` | | Liste aller aktuell selektierten Zeilen im Mehrfach-Modus. Unterstützt @bind-SelectedItems. |
| ``SelectedItemsChanged`` | ``EventCallback<IList<TItem>>`` | | EventCallback für @bind-SelectedItems. |
| ``OnSelectionChanged`` | ``EventCallback<IList<TItem>>`` | | Wird bei jeder Änderung der Selektion ausgelöst und liefert die vollständige Liste aller selektierten Zeilen. |
| ``SaveStateEnabled`` | ``bool`` | | Aktiviert die automatische Persistenz von Sortierung, aktiver Seite und PageSize in SessionStorage. Der Storage-Key wird aus dem TItem-Typnamen automatisch abgeleitet. Beim n\u00e4chsten Seitenaufruf wird der gespeicherte Zustand wiederhergestellt. Standard: false. |
## Geerbte Parameter (OoComponentBase)
Alle nicht deklarierten HTML-Attribute (``class``, ``style``, ``data-*``, ``aria-*``, ...) werden an das Root-Element weitergereicht.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
| ``Size`` | ``string`` | | Größe der Komponente. Mögliche Werte: OoSize.Xs, OoSize.Sm, OoSize.Md, OoSize.Lg, OoSize.Xl. Wird als CSS-Klasse am Root-Element gesetzt. |
## Hinweise
- Natives HTML-Attribut class wird automatisch an das Root-Element weitergegeben
- Natives HTML-Attribut style wird automatisch an das Root-Element weitergegeben
- Alle weiteren nicht deklarierten Attribute (data-*, aria-*, id, tabindex, …) werden ebenfalls weitergereicht
- Größe der Komponente via Size mit OoSize-Konstanten steuern (OoSize.Xs bis OoSize.Xl)
- Spalten als DataGridColumn-Kindkomponenten im Columns-RenderFragment definieren
- In-Memory-Daten: Items="@_liste" verwenden
- Serverseitige Daten: QueryableItems="@_query" hat Vorrang vor Items
- Sortierung übergabe: OnSortChanged-Callback empfängt Property und Richtung für eigene IQueryable-Logik
- State-Persistenz: SaveStateEnabled="true" speichert Sortierung, Seite und PageSize in SessionStorage
- Selektion: SelectionMode="Single" oder "Multiple" aktiviert Zeilenauswahl mit @bind-SelectedItem(s)
- Toolbar: ToolbarContent-RenderFragment erscheint rechts über der Tabelle (Export-Buttons, Aktionen)
- Scrollbare Tabelle: MaxHeight="400px" macht den Grid-Bereich scrollbar mit sticky Header