LivaDataGrid
DevExtreme DataGrid üzerine kurulu, tam donanımlı veri tablosu bileşeni. Sayfalama, filtreleme, arama, seçim, satır içi düzenleme ve dışa aktarma gibi özellikler hazır prop'larla açılıp kapatılır. Veri kaynağı olarak yerel bir dizi veya ASP.NET uzak veri kaynağı tanımı kullanılabilir.
import { LivaDataGrid, type LivaDataGridColumn } from "@dataliva/livalib";
Temel kullanım
columns ve keyExpr zorunludur; dataSource düz bir dizi olabilir. Kolonlar
LivaDataGridColumn tipindedir ve en sık dataField, caption, dataType,
format ile alignment alanları kullanılır. showPager sayfalayıcıyı açar,
pagingDefaultPageSize ve pagingAllowedPageSizes sayfa boyutunu yönetir.
type Personel = { id: number; adSoyad: string; sehir: string; gorev: string; maas: number };
const personeller: Personel[] = [
{ id: 1, adSoyad: "Ayşe Yılmaz", sehir: "İstanbul", gorev: "Yönetici", maas: 82000 },
// ...
];
const kolonlar: LivaDataGridColumn[] = [
{ dataField: "adSoyad", caption: "Ad Soyad" },
{ dataField: "sehir", caption: "Şehir" },
{ dataField: "gorev", caption: "Görev" },
{ dataField: "maas", caption: "Maaş", dataType: "number", format: "#,##0 ₺", alignment: "right" },
];
Filtreleme ve arama
showFilterRow kolon altına filtre satırı, showHeaderFilter kolon başlığına
değer listesi, showSearchPanel ise tablo genelinde arama kutusu ekler.
rowAlternationEnabled satırları dönüşümlü renklendirerek okunabilirliği
artırır.
Başlık filtresinde arama
showHeaderFilter açıkken açılan değer listesinin üstündeki arama kutusu üç
noktada DevExtreme'in varsayılanından ayrılır; üçü de otomatiktir, prop
gerektirmez:
- Kutunun sağına bir mod seçici eklenir: Contains, Begins with,
Ends with. Seçim listenin
searchModedeğerini anında değiştirir. - Arama, listede yazılı görünen metin üzerinde çalışır; ham sayısal değer
üzerinde değil.
formatile yuvarlanmış bir kolonda1.234,57yazıp arayabilirsiniz — varsayılan davranışta bu, arka plandaki1234,5678değerine denk gelmediği için sonuç vermez. Liste sayfalıysa eşleşmeler tüm sayfalarda aranır, yalnız ilk sayfada değil. - Liste yeniden açıldığında uygulanmış (işaretli) değerler en üstte durur; iki grubun kendi içindeki sıra (yapılandırılmış sıralama dahil) korunur. Yalnız pencere açıldığı anda uygulanmış olan seçim öne alınır — yeni işaretlenenler, filtre uygulanıp liste tekrar açılana kadar yerinde kalır.
Lookup'lu, özel dataSource verilmiş ve hiyerarşik tarih filtreli kolonlar kendi
yükleme kurallarını koruduğu için biçimli metin aramasının dışında kalır; işaretli
değerlerin öne alınması ise lookup'lu kolonlarda da çalışır (bunun için liste
sayfalanmadan yüklenir). Bir kolonda headerFilter alanını kendiniz
verdiğinizde Liva'nın varsayılanı tümüyle devre dışı kalır.
Toplam kayıt satırı — totalRow
totalRow açıldığında tablonun hemen altında (alt araç çubuğunun üstünde)
Toplam kayıt: N yazan ince bir şerit çıkar. Dizi kaynakta başlangıç değeri
dizinin uzunluğudur; grid içeriği her hazırlandığında sayı DevExtreme'in bildirdiği
toplamla (totalCount()) tazelenir. Toplam alınamazsa son bilinen değer kalır,
hiç bilinmiyorsa — görünür. lang değeri EN ile başlıyorsa etiket Total
records olur ve sayı en-US biçimiyle yazılır; aksi halde Toplam kayıt ve
tr-TR. Varsayılan false'tur.
Ortak prop preset'i — getGridProps()
Çoğu sayfada aynı temel proplar tekrar eder. Bunları her tabloda tek tek yazmak yerine projenin kendi preset fonksiyonunu spread edin. Bir grid kurarken yazacağınız satır budur:
import { LivaDataGrid } from "@dataliva/livalib";
import { getGridProps } from "@/features/_shared/components";
<LivaDataGrid
{...getGridProps()}
keyExpr="id"
dataSource={personeller}
columns={kolonlar}
/>
Spread'i props listesinin en başına koyun; böylece sayfaya özel proplar preset'i ezebilir — tek bir ayarı değiştirmek için o prop'u yazmanız yeter:
<LivaDataGrid {...getGridProps()} editMode="cell" /> // editMode → "cell"
Yetki (allowAdding, allowEditing, allowDeleting), export, veri kaynağı
(remoteOperations dahil) ve olaylar preset'e girmez; bunlar her sayfanın
kendi kararıdır.
Preset fonksiyonunu tanımlama
Her proje bu fonksiyonu bir kez yazar ve tüm gridler onu çağırır. LivaBudget'ta
_shared/components/getGridProps.ts altında durur:
import { LivaDataGrid } from "@dataliva/livalib";
import type { ComponentProps } from "react";
type LivaGridProps = ComponentProps<typeof LivaDataGrid>;
export function getGridProps(): Partial<LivaGridProps> {
return {
gridSize: "xxs",
fullHeight: true,
editMode: "batch",
scrollingMode: "virtual",
showToolbar: true,
showSearchPanel: true,
columnChooser: true,
isLivaContextMenu: true,
allowGrouping: false,
lang: currentLanguage(), // Accept-Language başlığı
noDataText: t("Common.NoData"), // çeviriden
};
}
Değerler tahminle değil, mevcut kullanımların taranmasıyla seçilir: bir ayarı
sayfaların tamamına yakını aynı yazıyorsa preset'e girer. LivaBudget'taki 63
<LivaDataGrid> kullanımında gridSize: "xxs" 62/62, fullHeight 54/54,
scrollingMode: "virtual" 45/45, editMode: "batch" 51/51 çıktığı için bunlar
preset'e alındı.
Bu bir hook DEĞİLDİR ve hook çağırmaz. Fonksiyon JSX içinde koşullu dallarda (
yetkiVar ? <LivaDataGrid {...getGridProps()} /> : null) çağrılabildiği içinuseTranslation/useSelectorgibi bir hook barındırırsa render'lar arasında hook sayısı değişir ve React "Rendered more hooks than during the previous render" hatası verir. Dil ve çeviri değerlerini store'dan / i18n örneğinden doğrudan okuyun; sayfa zaten çeviri değişiminde yeniden render olduğu için değerler tazelenir.
Ağaç sürümü için LivaTreeList'teki getTreeList()
kullanılır.
Kütüphane tarafı — baseGridProps
@dataliva/livalib, baseGridProps adında asgari bir nesne de dışa aktarır:
| Prop | Değer |
|---|---|
gridSize | "xs" |
fullHeight | true |
showToolbar | true |
showSearchPanel | true |
editMode | "batch" |
as const satisfies Partial<LivaDataGridProps> ile tanımlıdır: değerler literal
tipte kalır, yanlış bir prop adı derleme hatası verir. Bu, kütüphane genelinde
güvenli olan en küçük ortak kümedir — bir projenin standardı bundan geniştir,
o yüzden sayfalarda doğrudan baseGridProps spread etmeyin. Yeni bir projede
preset fonksiyonuna başlangıç noktası olarak kullanabilirsiniz:
import { baseGridProps } from "@dataliva/livalib";
export function getGridProps(): Partial<LivaGridProps> {
return { ...baseGridProps, gridSize: "xxs", scrollingMode: "virtual" /* … */ };
}
Toplu işlemler
selectionMode="multiple" (varsayılan) iken alt araç çubuğunda, Kaydet'in
sağında bir İşlemler menüsü çıkar. Satır seçildiği anda buton primary renge
döner. Menü üç katmandan oluşur ve bu sırayla dizilir:
- Seçim araçları —
bulkSelectionToolsile yönetilir, varsayılan açık: Sadece Seçilileri Göster (mevcut filtrenin üstüne geçici bir filtre biner, kapatınca eski filtre geri gelir), Panoya Kopyala (başlıklarla) — Excel'e yapıştırılabilir TSV, Seçimi Tersine Çevir (yalnızca yüklü satırlarda) ve Seçimi Temizle. - Seçilenleri Sil —
allowBulkDeleteile açılır; verilmezseallowDeletingdeğerini devralır. Onay penceresinden sonra varsayılan silme çalışır;onBulkDeleteverirseniz davranışı siz üstlenirsiniz. bulkActions— sayfaya özel işlemler, listenin en altına eklenir.
import type { LivaGridBulkAction } from "@dataliva/livalib";
const islemler: LivaGridBulkAction[] = [
{
id: "approve",
text: (ctx) => `Onayla (${ctx.keys.length})`,
icon: "check",
disabled: (ctx) => ctx.keys.length === 0,
confirm: (ctx) => `${ctx.keys.length} kayıt onaylanacak, devam edilsin mi?`,
confirmTitle: "Toplu Onay",
confirmButtonText: "Onayla",
onClick: async (ctx) => {
await api.approve(ctx.keys);
ctx.component.refresh();
},
},
];
<LivaDataGrid {...getGridProps()} bulkActions={islemler} allowBulkDelete />
text, disabled ve confirm alanları düz değer ya da
(ctx: LivaGridBulkActionContext) => … fonksiyonu alabilir; fonksiyon menü her
açıldığında güncel seçimle çağrılır. danger: true öğeyi ve onay butonunu
kırmızıya çevirir.
Sayfalı veya sanal kaynakta
ctx.rowsyalnızca yüklü satırları taşır;ctx.keystam seçimdir. Sunucuya iş gönderirkenkeysüzerinden çalışın.
Excel refleksleri — excelMode
Grid, Excel'den gelen kullanıcının alışkanlıklarını karşılar: blok seçme, formül
yazma, tutamaçla doldurma ve seçim özeti. Varsayılan olarak açıktır
(excelMode = true); tek tek kapatmak için nesne verin.
<LivaDataGrid
{...getGridProps()}
excelMode={{ formulas: false, rangeTotals: false }}
allowEditing
editMode="batch"
// ...
/>
| Alan | Varsayılan | Ne yapar |
|---|---|---|
rangeSelection | açık | Sürükleyerek blok seçme, Shift+tık ile genişletme, Ctrl+tık ile ikinci blok ekleme, Shift+Ok ile klavyeden büyütme |
fillHandle | açık | Bloğun sağ alt köşesindeki tutamaçla doldurma; sabit farklı diziyi sürdürür |
formulas | açık | Sayı hücrelerine =2500*1,18 veya =SUM(Ocak:Mart)/3 yazılabilir |
statsBar | açık | Alt şeritte seçili bloğun Toplam / Ort / Min / Max / Adet özeti |
rangeTotals | açık | Seçili bloğun sağında satır, altında sütun toplamı rozetleri; tablonun ya da ekranın kenarında yer kalmazsa rozet bloğun soluna / üstüne geçer |
copyFormat | 'display' | Panoya ekrandaki biçimli metin (1.234,56) ya da ham sayı ('raw') gider |
Yazma gerektiren alanlar kendiliğinden kısıtlanır: fillHandle, formulas,
Ctrl+V ve Delete yalnızca allowEditing açık ve editMode 'batch' veya
'cell' iken çalışır. rangeSelection, enableRowDragging ile birlikte
kapanır — satır taşıma ile blok sürükleme aynı fareyi paylaşamaz, satır taşıma
önceliklidir. rangeTotals ve statsBar blok seçimine bağlıdır.
Klavye ve pano
| Tuş | Etki |
|---|---|
| Sürükle / Shift+tık | Blok seç / genişlet |
| Ctrl+tık, Ctrl+sürükle | Mevcut seçime ikinci blok ekle |
| Shift+Ok | Bloğu klavyeden büyüt |
| Ctrl+C | Seçili blokları TSV olarak panoya kopyala |
| Ctrl+V | Panodaki matrisi bloğun sol üst köşesinden başlayarak yaz |
| Delete / Backspace | Seçili blokları temizle |
| Escape | Seçimi bırak |
Tarayıcı pano okumaya izin vermediğinde (Firefox hiç vermez, Chrome sorar) sağ tık menüsündeki Excel'den Yapıştır penceresi kullanılır: metin kutusuna yapıştırılan matris önizlenir, sonra hücrelere yazılır.
Hücre içi formüller
Hesaplama = ister. = ile başlamayan giriş düz sayı olarak okunur —
1200+300 hesaplanmaz. Ayrıştırıcı elle yazılmıştır, eval kullanılmaz;
Türkçe kolon adlarını ve 1.234,56 biçimini tanır.
=2500*1,18 düz aritmetik
=Ocak*1,1 aynı satırdaki başka kolon (başlık ya da dataField ile)
=SUM(Ocak:Mart)/3 görünür kolon sırasına göre aralık
=Ocak*%10 ön ekli yüzde (sonda da yazılabilir: 10%)
=BU*1,05 formülün yazıldığı kolon (SELF)
Fonksiyonlar: SUM, AVG, MIN, MAX, COUNT, ABS, SQRT, ROUND,
FLOOR, CEIL — Türkçe eş adlarıyla birlikte (TOPLA, ORT, ENKUCUK,
ENBUYUK, ADET, MUTLAK, KAREKOK, YUVARLA, TABAN, TAVAN).
Formül metni saklanmaz. Grid bir hesap tablosu değil; ayrıştırıcı sayı döndürür ve hücreye ham sayı yazılır. Sonraki açılışta hücrede yalnız sonuç durur.
Ondalık basamak — sağ tık menüsü
Sayısal (dataType: "number") bir kolonun ya da V001…V012 kalıbındaki ay
kolonlarının hücresine sağ tıklandığında Görünüm → Ondalık Basamak alt menüsü
çıkar: Küsuratsız, 1–4 basamak ve Varsayılan. Seçim kolonun kendi format
tipini (para birimi, yüzde vb.) korur, yalnızca precision değerini ezer; string
format verilmişse { type, precision } nesnesine, format hiç verilmemişse
fixedPoint'e dönüştürülür.
Ay kolonlarında seçim tüm ay kolonlarına birden uygulanır — tek tek 12 kolonu ayarlamak gerekmez. Ayar bileşen state'inde tutulur; kalıcı değildir ve adlandırılmış düzenlere yazılmaz.
Aralık kuralı (Min / Max) — sağ tık menüsü
Aynı sağ tık menüsünün Denetim başlığı altında Aralık Gir (Min / Max) yer alır. Ondalık basamak hücrenin nasıl göründüğünü değiştirir; aralık kuralı değerin doğru olup olmadığını işaretler — bu yüzden ayrı başlıkta durur.
Açılan pencerede alt ve üst sınır girilir. Sınırlardan biri boş bırakılabilir;
boş uç sınırsız demektir. Kural hiçbir hücreye yazmaz, yalnızca görsel bir
denetimdir: aralık dışında kalan hücreler renklendirilir ve title ile sınır
bilgisini taşır.
- Kapsam — kuralın hangi kolonlara konacağı: yalnız bu kolon, Tüm ay
sütunları (
V001…V012kalıbı), ya da Tüm sayı sütunları. Seçeneğin yanında kaç kolonu tuttuğu yazar. Ay kolonuna sağ tıklandığında ay kapsamı ön seçili gelir. Kural hangi kapsamla konulduysa Aralık Kuralını Kaldır aynı grubun tamamından birlikte kalkar. - Renk — kırmızı (varsayılan, "bu değer hatalı") ya da yeşil. Yeşil, olumsuz okunmaması gereken takip amaçlı denetimler için.
- Önizleme — uygulamadan önce kaç hücrenin dışarıda kalacağını ve birkaç örnek hücreyi gösterir. Önizleme ekrandaki satırlar üzerinden hesaplanır; sanal kaydırmada tüm veri elde olmadığı için sayı yüklü satırları yansıtır.
Ondalık basamak ayarı gibi bu da bileşen state'inde tutulur: kalıcı değildir ve
adlandırılmış düzenlere yazılmaz. Kural mantığı LivaTreeList ile ortaktır, iki
bileşende de aynı menü ve aynı pencere çıkar.
Sağ tık menüsüne öğe ekleme — onContextMenuPreparing
Sayfaya özel menü öğeleri için onContextMenuPreparing verin. İşleyiciniz
Liva'nın kendi öğeleri (kopyalama/yapıştırma, Görünüm, Denetim…) hazırlandıktan
sonra çağrılır; e.items dizisine ekleme yapabilir, öğe çıkarabilir ya da
sırayı değiştirebilirsiniz.
<LivaDataGrid
{...getGridProps()}
onContextMenuPreparing={(e) => {
if (e.row?.rowType !== "data") return;
const satir = e.row.data;
e.items = e.items ?? [];
e.items.unshift({
text: "Kartı Aç",
icon: "folder",
onItemClick: () => kartiAc(satir.id),
});
}}
/>
LivaTreeList'teki aynı adlı prop da aynı sırayla çalışır.
İçe/dışa aktarma
exportOptions Excel/CSV/PDF dışa aktarma butonlarını açar.
importExportSettings ise DataExchange sözleşmesine bağlanır: processKey
verdiğinizde içe aktarma sihirbazı grid'in içine kendiliğinden monte edilir.
Kurulum, uç noktalar ve adaptörler için
Veri Alışverişi sayfasına bakın.
İçe aktarma başarıyla bittiğinde grid kendi refresh()'ini çağırır; bu yalnızca
bağlı veri kaynağını yeniden okur. dataSource olarak yerel bir dizi
veriyorsanız veriyi importExportSettings.onImportCompleted(report) içinde
kendiniz yeniden yükleyin. Sihirbazın teknik bilgi kartı (showDiagnostics)
importExportSettings.config.dataExchange üzerinden ya da uygulama genelinde
LivaGridConfigProvider ile açılır.
Adlandırılmış düzenler
Grid bir LivaGridStateProvider altında kullanıldığında araç çubuğunda Düzen
menüsü açılır. Kullanıcı kolon sırası, genişliği, görünürlüğü, sabitleme,
sıralama, gruplama ve filtre ayarlarını adlandırarak sunucuda saklayabilir.
id verilmezse kayıt anahtarı sayfa yolu, keyExpr ve kolon alanlarından
otomatik üretilir; aynı sayfada aynı kolonlara sahip iki grid varsa ya da kolon
eklenip çıkarıldığında düzenlerin korunması gerekiyorsa sabit bir id verin.
Kolon şeması geriye uyumsuz değiştiğinde stateVersion değerini artırın.
Provider kurulumu ve REST sözleşmesi ayrı rehberde yer alır.
Temel ve veri
| Prop | Tip | Varsayılan |
|---|---|---|
columns | LivaDataGridColumn[] | — (zorunlu) |
keyExpr | string | — (zorunlu) |
dataSource | Array<any> | LivaDataGridDataSourceTypes | — |
title | string | — |
desc | string | — |
remoteOperations | boolean | — |
refreshMode | GridsEditRefreshMode | 'reshape' |
selectedRowKeys | any[] | — |
lang | string | — (uzak istekte Accept-Language başlığı) |
id | string | — (provider altında verilmezse anahtar otomatik üretilir) |
stateVersion | number | — |
Görünüm ve düzen
| Prop | Tip | Varsayılan |
|---|---|---|
height | number | string | '100%' |
width | number | string | '100%' |
visible | boolean | true |
fullHeight | boolean | false |
gridSize | 'xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'md' |
radius | 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'none' |
cursor | 'pointer' | 'default' | 'default' |
showBorders | boolean | true |
showRowLines | boolean | false |
showColumnLines | boolean | true |
showColumnHeaders | boolean | true |
rowAlternationEnabled | boolean | true |
hoverStateEnabled | boolean | true |
wordWrapEnabled | boolean | false |
columnAutoWidth | boolean | false |
columnHidingEnabled | boolean | false |
allowColumnResizing | boolean | true |
allowColumnReordering | boolean | düzen saklamada true, aksi halde false |
columnResizingMode | 'nextColumn' | 'widget' | 'widget' |
columnChooser | boolean | true |
allowGrouping | boolean | false |
rtlEnabled | boolean | false |
noDataText | string | 'No data' |
showSkeleton | boolean | true |
isInitializing | boolean | false |
loadPanel | { enabled?, text?, showPane?, showIndicator?, shading? } | etkin |
Kullanıcı erişilebilirlik tercihlerinde (useLivaAccessibility) tablo yoğunluğu
(gridDensity) ya da zebra satırlar (zebraRows) için Otomatik dışında bir
değer seçtiyse bu tercih gridSize ve rowAlternationEnabled proplarını ezer —
seçim uygulamadaki tüm tablolara uygulanır. showSkeleton açıkken iskelet
yalnızca ilk yüklemede yükleme panelinin yerini alır; yenileme ve kaydetme
sırasında loadPanel yine görünür.
Seçim, kaydırma ve sayfalama
| Prop | Tip | Varsayılan |
|---|---|---|
selectionMode | 'none' | 'single' | 'multiple' | 'multiple' |
scrollingMode | 'standard' | 'virtual' | 'infinite' | 'infinite' |
showPager | boolean | false |
totalRow | boolean | false (tablonun altında Toplam kayıt şeridi) |
pagingDefaultPageSize | number | 10 |
pagingAllowedPageSizes | number[] | [5, 10, 20] |
Not:
selectionModevarsayılanı'multiple''dır — grid, siz istemeseniz de satır başına onay kutusu gösterir ve seçim yapıldığında alt araç çubuğunda İşlemler menüsü belirir. Seçim istemiyorsanızselectionMode="none"verin.
Not:
scrollingModevarsayılanı'infinite'olduğundan sayfalayıcı (showPager) ve sayfa boyutu ayarları etkisiz kalır — infinite/virtual kaydırmada tüm satırlar kaydırılarak yüklenir. Klasik sayfalayıcıyı görmek içinscrollingMode="standard"verin.
Filtreleme ve arama
| Prop | Tip | Varsayılan |
|---|---|---|
showFilterRow | boolean | false |
showFilterOperationChooser | boolean | false |
showFilterSearchIcon | boolean | true |
showHeaderFilter | boolean | true |
showFilterPanel | boolean | false |
showSearchPanel | boolean | true |
showCreateFilterButton | boolean | true |
showFilterOperationChooser, filtre hücresindeki büyüteç ikonuna "İçerir /
Eşittir / İle başlar…" menüsünü bağlar. Bu ikon sabit boyutlu, mutlak konumlu bir
katman olduğu için filtre satırının kısalabileceği yüksekliğe alt sınır koyar —
bu yüzden varsayılan olarak kapalıdır; kapalıyken de her kolon kendi varsayılan
operasyonuyla (metinde contains, sayıda =) filtrelemeye devam eder.
showFilterSearchIcon ise yalnızca dekoratif bir büyüteç çizer: tıklanabilir
değildir, menü açmaz ve satır yüksekliğini kısıtlamaz. Lookup ve tarih hücreleri
DevExtreme'in kendi açılır ikonunu gösterdiği için atlanır.
Düzenleme (CRUD)
| Prop | Tip | Varsayılan |
|---|---|---|
editMode | 'cell' | 'row' | 'popup' | 'form' | 'batch' | 'batch' |
startEditAction | 'click' | 'dblClick' | 'click' |
allowAdding | boolean | false |
allowEditing | boolean | false |
allowDeleting | boolean | false |
allowCloning | boolean | false |
editPopup | { title?, width?, height?, readOnly?, onSave?, onCancel?, children?, ... } | — |
startEditAction düzenlemenin hangi tıklamayla başlayacağını belirler.
Varsayılan 'click' tek tıkta editöre girer — Excel refleksi olan kullanıcı için
hızlıdır, ama aynı tıklama blok seçimiyle yarışır. Blok seçiminin ve satır
tıklamasının rahat çalışması gereken tablolarda 'dblClick' verin.
Excel kipi
| Prop | Tip | Varsayılan |
|---|---|---|
excelMode | boolean | LivaExcelModeOptions | true |
Blok seçimi, hücre içi formül, doldurma tutamacı, seçim özeti ve toplam
rozetleri. Tümünü kapatmak için excelMode={false}, tek tek ayarlamak için nesne
verin. Ayrıntı ve klavye kısayolları için Dokümantasyon sekmesindeki Excel
refleksleri bölümüne bakın.
Araç çubuğu ve dışa/içe aktarma
| Prop | Tip | Varsayılan |
|---|---|---|
showToolbar | boolean | 'top' | 'bottom' | true |
toolbarItems | any[] | — |
headerToolbar | React.ReactNode | — |
isLivaContextMenu | boolean | true |
summary | Summary | — |
exportOptions | LivaDataGridExportOptions | — |
importExportSettings | LivaDataGridImportExportSettings | — |
enableRowDragging | boolean | false |
Toplu işlemler
Yalnızca selectionMode="multiple" iken görünür; satır seçildiği anda alt araç
çubuğundaki İşlemler butonu primary renge döner.
| Prop | Tip | Varsayılan |
|---|---|---|
bulkActions | LivaGridBulkAction[] | — |
bulkSelectionTools | boolean | true |
allowBulkDelete | boolean | allowDeleting |
onBulkDelete | (e: LivaGridBulkActionContext) => void | Promise<void> | — |
Master-detail
| Prop | Tip | Varsayılan |
|---|---|---|
masterDetailEnabled | boolean | false |
masterDetailRender | (data: { data, key }) => React.ReactNode | — |
masterDetailAutoExpandAll | boolean | false |
Ay (month) araçları
| Prop | Tip | Varsayılan |
|---|---|---|
monthOptions | MonthBuilderOptions | — |
monthAdjustOptions | LivaMonthAdjustOptions | — |
Olay geri çağrıları
| Prop | Tip |
|---|---|
onRowClick | (e: RowClickEvent) => void |
onRowDblClick | (e: RowDblClickEvent) => void |
onSelectionChanged | (e: SelectionChangedEvent) => void |
onRowUpdated | (e: any) => void |
onRowInserted | (e: RowInsertedEvent) => void |
onRowRemoved | (e: RowRemovedEvent) => void |
onRowPrepared | (e: RowPreparedEvent) => void |
onCellPrepared | (e: CellPreparedEvent) => void |
onCellClick | (e: CellClickEvent) => void |
onCellDblClick | (e: CellDblClickEvent) => void |
onEditingStart | (e: EditingStartEvent) => void |
onInitNewRow | (e: any) => void |
onInitialized | (e: any) => void |
onContentReady | (e: any) => void |
onSaving | (e: any) => void | Promise<void> |
onToolbarPreparing | (e: any) => void |
onContextMenuPreparing | (e: ContextMenuPreparingEvent) => void |
onRowDragging | (e: LivaRowDraggingEvent) => void |
onAddClick | () => void |
onShowRowStatus | (rowData: any, rowKey?: any) => void |
onContextMenuPreparing, Liva'nın kendi sağ tık öğeleri hazırlandıktan sonra
çağrılır; e.items'a eklenen öğeler menüde görünür.
onSaving verildiğinde (ve yerleşik batch kaydı — dataSource.updateUrl —
devrede değilse) grid DevExtreme'in kendi kaydını iptal eder (e.cancel = true),
olaya verticalPasteData'yı ekler ve işleyicinin döndürdüğü Promise bitene kadar
kaydı bekletir. Dikey yapıştırma verisi ve kaydedilmemiş değişiklik durumu
yalnızca işleyici bekleyen düzenlemeleri gerçekten temizlediğinde (ör.
cancelEditData() ile) sıfırlanır; Promise reddedilirse ya da düzenlemeler
yerinde kalırsa korunur.
Kolon tipi — LivaDataGridColumn
DevExtreme IColumnProps alanlarına ek olarak (dataField, caption,
dataType, format, width, visible, cellRender vb.) aşağıdaki Liva'ya
özgü alanları destekler:
| Alan | Tip | Açıklama |
|---|---|---|
alignment | 'left' | 'center' | 'right' | 'start' | Başlık/hücre hizası |
cellAlignment | 'left' | 'center' | 'right' | Yalnızca hücre içeriği hizası |
summary | LivaDataGridColumnSummary | Kolon bazlı özet (sum, min, max, avg, count) |
lookup | { dataSource, valueExpr?, displayExpr? } | Değer eşleme listesi |
dropdown | LivaDataGridColumnDropdown | Hücre içi açılır liste (plain | datagrid | treelist); alanları aşağıda |
fixed | boolean | Kolonu sabitle |
fixedPosition | 'left' | 'right' | Sabitleme yönü |
hidingPriority | number | Duyarlı gizleme önceliği |
headerFilter | DevExtreme Column headerFilter alanı | Başlık filtresi listesini kendiniz tanımlar. Verilmezse Liva'nın biçimli metin üzerinde arayan varsayılanı uygulanır. |
Hücre içi açılır liste — LivaDataGridColumnDropdown
Kolonun dropdown alanı verildiğinde hücre editörü bir LivaDropdownBox olur;
seçilen değer ve görünen metin hücreye yazılır.
| Alan | Tip | Varsayılan |
|---|---|---|
dataSource | any[] | { loadUrl, token?, key?, loadParams? } | — (zorunlu) |
renderMode | 'plain' | 'datagrid' | 'treelist' | 'plain' |
valueExpr | string | 'id' |
displayExpr | string | ((item) => string) | 'name' |
columns | LivaDataGridColumn[] | — (listede gösterilecek kolonlar) |
scrollingMode | 'virtual' | 'standard' | 'infinite' | 'virtual' |
selectionMode | 'single' | 'multiple' | 'single' |
remoteOperations | boolean | — |
parentIdExpr / hasItemsExpr / itemsExpr | string | 'parentId' / 'hasItems' / 'items' (treelist modu) |
rootValue / dataStructure | any / 'plain' | 'tree' | — (treelist modu) |
contentHeight | number | string | 400 |
dropDownWidth | number | string | — (içeriğe göre, en az 300px) |
size | LivaControlSize ('xxs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl') | 'xs' |
placeholder | string | 'Select...' |
searchEnabled | boolean | true |
dropDownWidth açılan panelin genişliğini sabitler (verildiğinde en küçük
genişlik de bu değer olur); verilmezse panel içeriğine göre genişler.
size hücredeki seçicinin yüksekliğidir ve kısa satırlı (xxs/xs) gridlere
sığması için küçük başlar. searchEnabled açıkken panelin üstünde arama kutusu
ve yanında bir Search mode seçici (Contains / Begins with /
Ends with) bulunur; mod değiştirildiğinde yazılı arama yeni operasyonla hemen
yeniden çalışır. columns verilen listelerde kolon başlık filtreleri de grid'in
biçimli metinde arayan başlık filtresini kullanır.
Yardımcı tipler
LivaDataGridDataSourceTypes— ASP.NET uzak veri kaynağı seçenekleri;AspNetData.Optionsalanlarına ek olaraktoken?,customizeLoadParams?veerrorHandler?içerir.LivaDataGridExportOptions—{ enabled?, actions?, fileName? };actionsdeğeri'excelAll' \| 'excelSelected' \| 'csv' \| 'pdf'dizisidir.LivaDataGridImportExportSettings— içe/dışa aktarma yapılandırması. Bildirimsel yol:enabled,processKey,baseUrl,endpoints,headerPolicy,contract,autoProvision,routeParams,config,wizardTitle,closeOnCompleteveonImportCompleted?: (report: DataExchangeReport) => void(başarılı içe aktarmadan sonra; yerel dizi kaynakta veriyi burada yeniden yükleyin). Standart sihirbazdan çıkmak için eski kancalar:onImportExcel?,onExportExcel?,onDownloadTemplate?,onImportSettings?,onExportSettings?. Ayrıntı: Veri Alışverişi.LivaExcelModeOptions— Excel kipi anahtarları:rangeSelection?,fillHandle?,formulas?,statsBar?,rangeTotals?(hepsiboolean) vecopyFormat?('display' \| 'raw'). Verilmeyen alanexcelMode'un kendi açık/kapalı durumunu devralır.LivaMonthAdjustOptions— ay sütunları için kümülatif / değer artırma aracı:enabled,monthFields,totalField,getMonthCaptions,getRowKey,summaryFields,onApply. Verildiğinde ay (V001…V012) hücresinin sağ tık menüsüne Sayısal İşlemler başlığı altında Arttır/Azalt (tıklanan aydan yıl sonuna) ve Kümülatif Değer Arttır/Azalt (tüm yıl) gelir; ayrıntı: LivaMonthAdjustPopup.LivaGridBulkAction—İşlemlermenüsündeki tek bir toplu işlem:text(metin ya da(ctx) => string),icon?,danger?,hint?,disabled?,confirm?,confirmTitle?,confirmButtonText?,onClick.LivaGridBulkActionContext— işlemlere geçen bağlam:keys(seçili anahtarlar),rows(yüklü satırların verisi) vecomponent(DevExtreme örneği). Sayfalı/sanal kaynaktarows,keysten kısa olabilir.
Dışa açılan yardımcılar
Excel kipinin motoru paketten ayrıca dışa verilir; grid dışında (form alanı, özel bir editör, toplu hesap) aynı davranışı kurmak için kullanılabilir.
import {
evaluateFormula, isFormulaText, parseLocaleNumber, resolveCellInput,
FORMULA_FUNCTION_NAMES,
computeRangeStats, formatStatNumber, buildFillValues,
buildMatrixTsv, parseClipboardMatrix,
} from "@dataliva/livalib";
| Yardımcı | İmza / dönüş | Ne için |
|---|---|---|
isFormulaText | (input: unknown) => boolean | Girdi = ile başlıyor mu |
evaluateFormula | (input, ctx: FormulaEvalContext) => FormulaOutcome | Formülü sayıya çevirir; { ok: true, value } ya da { ok: false, error } |
resolveCellInput | formül ya da düz sayı girdisini tek çağrıda çözer | Hücreye yazılacak değeri bulmak |
parseLocaleNumber | (input: unknown) => number | null | 1.234,56, 1,234.56, (500), %10, para simgeleri |
FORMULA_FUNCTION_NAMES | string[] | Desteklenen fonksiyon adları (ipucu/otomatik tamamlama için) |
computeRangeStats | (values: unknown[]) => RangeStats | Toplam / ortalama / min / max / adet |
formatStatNumber | (value: number | null, lang?: string) => string | Özet şeridindeki sayı biçimi |
buildFillValues | doldurma tutamacının ürettiği diziyi hesaplar | Sabit farklı seriyi sürdürmek |
buildMatrixTsv / parseClipboardMatrix | string[][] ⇄ string | Pano TSV'si üretmek / okumak |
FormulaEvalContext üç alan ister: columns (görünür kolon sırası — aralık
çözümlemesi buna dayanır), getValue(dataField) (satırdaki ham değer; bekleyen
batch düzenlemeleri dahil olmalı) ve currentField? (BU / SELF bunu gösterir).