Sütun Başlığına Göre Delphi DBGrid Kayıtları Sıralama

Delphi DBGrid o kadar güçlü bir bileşendir ki, veri kullanan uygulamalar geliştiriyorsanız muhtemelen her gün kullanıyorsunuzdur. Aşağıda, veritabanı uygulamalarınıza, kullanıcılarınızın seveceği konusunda daha fazla özellik eklemeye bir göz atacağız.

Aşağıdaki bölümlerde açıklanan Delphi Veritabanı Programlama Başlangıç ​​Kılavuzu, aşağıdaki örneklerde ADO bileşenleri (ADOConnection'a bağlı AdoQuery / AdoTable, DataSource üzerinden AdoQuery'ye bağlı DBGrid) kayıtlar DBGrid bileşenindeki bir veritabanı tablosundan.

Tüm bileşen adları, forma bırakıldığında (DBGrid1, ADOQuery1, AdoTable1, vb.) Delphi olarak adlandırıldı.

Fare DBGrid Başlık Alanı Üzerinde Hareket Ediyor

İlk olarak, DBGrid başlık alanı üzerinde hareket ederken fare işaretçisini nasıl değiştireceğimizi görelim. Tek yapmanız gereken, DBGrid bileşeni için OnMouseMove olayına kodu eklemektir.

Aşağıdaki kod, fare işaretçisinin bulunduğu yeri "hesaplamak" için DBGrid bileşeninin MouseCoord özelliğini kullanır. DGBrid başlık alanının üzerindeyse, pt.y, DBGrid'deki (sütun / alan başlıklarını gösteren başlık alanı) ilk satır olan 0'a eşittir.

instagram viewer

prosedür TForm1.DBGrid1MouseMove
(Gönderen: TObject; Shift: TShiftState; X, Y: Tam sayı);
var
pt: TGridcoord;
başla
pt: = DBGrid1.MouseCoord (x, y);
Eğer pt.y = 0 sonra
DBGrid1.Cursor: = crHandPoint
Başka
DBGrid1.Cursor: = crDefault;
son;

Sütuna Göre Sırala Sütun Başlığı Yazı Tipini Tıklayın ve Değiştirin

Delphi veritabanı geliştirme için ADO yaklaşımını kullanıyorsanız ve veri kümesindeki kayıtları sıralamak istiyorsanız, AdoDataset'inizin (ADOQuery, AdoTable) Sort özelliğini ayarlamanız gerekir.

Sort özelliği, standart SQL sorgusunun "ORDER BY" bölümünü gösteren en geniş değerdir. Tabii ki, Sort özelliğini kullanabilmek için SQL sorgusu yazmanız gerekmez. Sırala özelliğini, her biri sıralama düzenini izleyen tek bir alanın adına veya virgülle ayrılmış bir alan listesine ayarlayın.

İşte bir örnek:

ADOTable1.Sort: = 'Yıl DESC, Makale Tarihi ASC'

DBGrid bileşeninin OnTitleClick olayı, kullanıcının tıkladığı Sütunu gösteren bir Sütun parametresine sahiptir. Her Sütun (TColumn tipindeki bir nesne), tarafından temsil edilen Alanı (TField) gösteren bir Field özelliğine sahiptir. Sütun ve FieldName özelliğindeki Alan, temeldeki alanın adını tutar Veri kümesi.

Bu nedenle, bir ADO veri kümesini alana / sütuna göre sıralamak için basit bir satır kullanılabilir:

TCustomADODataSet (DBGrid1.DataSource ile). DataSet) yapın
Sırala: = Sütun. Alan. Alan adı; // + 'ASC' veya 'DESC'

Sütun tıklamasıyla kayıtları sıralayan OnTitleClick çift işleyicisinin kodu aşağıdadır. Kod, her zaman olduğu gibi fikri genişletir.

İlk olarak, bir şekilde şu anda sıralama düzeni için kullanılan sütunu işaretlemek istiyoruz. Daha sonra, bir sütun başlığına tıklar ve veri kümesi zaten bu sütuna göre sıralanırsa, sıralama düzenini ASC'den (artan) DESC'ye (azalan) veya tam tersine değiştirmek istiyoruz. Son olarak, veri kümesini başka bir sütuna göre sıraladığımızda, işareti daha önce seçilen sütundan kaldırmak istiyoruz.

Basitlik amacıyla, kayıtları "sıralayan" sütunu işaretlemek için, sütun başlığının yazı tipi stilini Kalın olarak değiştireceğiz ve veri kümesi başka bir sütun kullanılarak sıralandığında onu kaldıracağız.

prosedür TForm1.DBGrid1TitleClick (Sütun: TColumn);
{$ J +}const PreviousColumnIndex: integer = -1;
{$ J-}
beginif DBGrid1.DataSource. DataSet dır-dir TCustomADODataSet thenwith TCustomADODataSet (DBGrid1.DataSource. DataSet) dobegintry
DBGrid1.Columns [PreviousColumnIndex] .title. Yazı tipi. Tarz: =
DBGrid1.Columns [PreviousColumnIndex] .title. Yazı tipi. Stil - [fsBold];
exceptend;
Column.title. Yazı tipi. Tarz: =
Column.title. Yazı tipi. Stil + [fsBold];
PreviousColumnIndex: = Sütun. Dizin;
Eğer (Konum (Sütun. Alan. AlanAdı, Sırala) = 1)
ve (Poz ('DESC', Sırala) = 0) sonra
Sırala: = Sütun. Alan. AlanAdı + 'DESC'
Başka
Sırala: = Sütun. Alan. AlanAdı + 'ASC';
son;
son;

Yukarıdaki kod kullanır yazılan sabitler sıralama düzeni için daha önce "seçilen" sütunun değerini korumak için.

instagram story viewer