İçeriğe geç

DataGrid

Bu sayfa İngilizceden çevrilmiştir. İngilizce sayfayı okuyun

DataGrid, DataQuery alan ve Page<E> döndüren bir action'dan satırları gösterir. Sayfalama, sıralama, filtreler ve toplamlar sunucuda çalışır; dolayısıyla milyon satırlık bir grid, tarayıcıya yüz satırlık bir grid ile aynı maliyeti yükler.

Bir grid

DataGrid::of(search_samples)
    .paging(Paging::pages(8))
    .column(Sample::code).width(110).filter()
    .column(Sample::name).flex(1).filter()
    .column(Sample::unit).width(120).filter().badge(|u| match u {
        Unit::Piece => Tone::Neutral,
        Unit::Kg => Tone::Info,
        Unit::Liter => Tone::Brand,
    })
    .column(Sample::price).width(150).avg()
    .column(Sample::stock).width(150).sum().progress(120)
    .column(Sample::active).width(100).check_icon()
    .row_style(|s| match s.stock {
        0 => Some(RowStyle::Danger),
        1..=9 => Some(RowStyle::Warning),
        _ => None,
    })
CodeNameUnitPriceStockActive
S-0001Green tea 105Piece83,69 ₺37
S-0002Coffee beans 110Liter162,88 ₺74
S-0003Olive oil 115Kg242,07 ₺111
S-0004Honey 120Piece321,26 ₺28
S-0005Hazelnuts 125Liter400,45 ₺65
S-0006Dried apricots 130Kg479,64 ₺102
S-0007Cheese 135Piece558,83 ₺19
S-0008Bulgur 140Liter638,02 ₺56
Ortalama 1.212,16 ₺Toplam 7.140

Bir başlığa tıklayarak sıralayın, filtre kutusuna yazın, bir sütunu taşımak için başlığını, yeniden boyutlandırmak için kenarını sürükleyin. Toplamlar yalnızca sayfayı değil, filtrelenmiş her satırı kapsar.

Action

#[action(permission = "stock.product.read")]
pub async fn search_samples(q: DataQuery, store: SampleStore) -> Result<Page<Sample>> {
    Ok(q.apply(store.all()?))
}

DataQuery::apply, bellekteki bir Vec üzerinde filtreler, sıralar, toplar ve sayfalar; bu küçük listeler ve testler için uygundur. Veritabanı destekli bir store aynı DataQuery değerini (sayfa, sıralama, filtreler, toplamlar) okur ve SQL ile yanıt verir; bkz. Veri ve veritabanları.

Sayfalama

SayfalamaKullanım
Paging::pages(n)Numaralı sayfalar, ayarlanmazsa 50 satır
Paging::infinite(n)Kaydırırken daha fazla satır yükler
Paging::virtual_scroll()Çok büyük listeler; sayfada yalnızca görünen satırlar bulunur
Paging::none()Tek sayfaya sığan kısa listeler

İstemci ne isterse istesin, sunucu sayfa boyutunu sınırlar.

Sütunlar

ÇağrıSonuç
.width(px), .flex(n)Sabit genişlik veya boş genişlikten bir pay
.filter()Türe uyan bir filtre kutusu: metin, sayı aralığı, tarih aralığı, seçim listesi
.sum(), .avg(), .min(), .max()Alt bilgide toplamlar. Metin sütununda sum derlenmez
.badge(|v| tone)Değeri renkli bir rozet olarak gösterir
.progress(max)0'dan max'a bir çubuk
.check_icon()true için bir onay işareti
.link(|row| effect)Hücreyi, bir effect çalıştıran bağlantı yapar
.pin_start(), .hidden()Başa sabitlenir ya da kullanıcı gösterene kadar gizlenir
.editable()Yerinde düzenlenebilir, .edit_with(action) ile kaydedilir

Satırlar

  • .on_open(|row| effect): bir satırda çift tıklama veya Enter.
  • .row_action(label, action, |row| input): her satırda bir düğme.
  • .bulk_action(label, action, M::id): seçili satırlarda çalışır.
  • .row_menu(|row| ContextMenu): bir satırın sağ tık menüsü.
  • .row_style(|row| Option<RowStyle>): danger, warning veya success satırlar.
  • .exportable(): filtrelenmiş satırların CSV dışa aktarımı, sunucu tarafından akıtılır.

DataGrid başvurusu kayıtlı görünümleri, master detail, gruplamayı, ağaç verisini, satır içi düzenlemeyi, hücre gezinmesini, kopyala yapıştırı, sütun sanallaştırmayı ve erişilebilirliği kapsar.