Delphi: DBGrid Sütun Genişliklerini Otomatik Olarak Ayarla

Kullanıcının sekmeli bir ızgaradaki verileri görüntülemesini ve düzenlemesini sağlamak için tasarlanmıştır. DBGrid "verilerini" temsil etme biçimini özelleştirmenin çeşitli yollarını sunar. Çok esneklikle, Delphi geliştirici her zaman daha güçlü hale getirmek için yeni yollar bulabilir.

TDBGrid'in eksik özelliklerinden biri, ızgaraların istemci genişliğine tam olarak uyacak şekilde belirli sütunların genişliklerini otomatik olarak ayarlama seçeneğinin olmamasıdır. DBGrid bileşenini çalışma zamanında yeniden boyutlandırdığınızda, sütun genişlikleri yeniden boyutlandırılmaz.

DBGrid'in genişliği tüm sütunların toplam genişliğinden daha büyükse, son sütundan hemen sonra boş bir alan elde edersiniz. Öte yandan, tüm sütunların toplam genişliği DBGrid'in genişliğinden daha büyükse, yatay bir kaydırma çubuğu görünür.

DBGrid Sütun Genişliklerini Otomatik Olarak Ayarla

Izgara çalışma zamanında yeniden boyutlandırıldığında, seçici DBGrid sütunlarının genişliklerini düzelten, uygulayabileceğiniz kullanışlı bir yordam vardır.

instagram viewer

Genellikle, bir DBGrid'deki yalnızca iki ila üç sütunun aslında otomatik olarak yeniden boyutlandırılması gerektiğine dikkat etmek önemlidir; diğer tüm sütunlarda bazı "statik genişlik" verileri görüntülenir. Örneğin, TDateTimeField, TFloatField, TIntegerField ve benzerleriyle temsil edilen veri alanlarından değerleri görüntüleyen sütunlar için her zaman sabit genişlik belirleyebilirsiniz.

Dahası, veri kümesindeki alanları, özelliklerini ve sıralarını belirtmek için muhtemelen Alanlar düzenleyicisini kullanarak (tasarım zamanında) kalıcı alan bileşenleri oluşturacaksınız. Bir TField alt öğe nesnesiyle, söz konusu alanın değerlerini gösteren belirli bir sütunun otomatik olarak boyutlandırılması gerektiğini belirtmek için Tag özelliğini kullanabilirsiniz.

Fikir şu: Bir sütunun kullanılabilir alana otomatik olarak sığmasını istiyorsanız, TField torununun Tag özelliği için karşılık gelen sütunun minimum genişliğini gösteren bir tamsayı değeri atayın.

FixDBGridColumnsWidth Yordamı

Başlamadan önce, OnCreate etkinliği DBGrid içeren Form nesnesi için, karşılık gelen TField nesnesinin Tag özelliği için sıfırdan farklı bir değer atayarak hangi sütunların otomatik olarak yeniden boyutlandırılması gerektiğini belirtin.

prosedür TForm1.FormCreate (Gönderen: TObject);
başla
// otomatik olarak atanabilir sütunları atayarak ayarlayın
// Tag özelliğinde Minimm Genişlik.

// sabit değer kullanarak: 40 piksel
Tablo1.FieldByName ('Ad') Etiket: = 40;
// değişken değerini kullanarak:
// varsayılan Sütun başlık metni
Tablo1.FieldByName ('Soyadı') Etiket: = 4 + Tuval. TextWidth (Tablo1.FieldByName ('Soyadı'). GörünenAd);
son
;

Yukarıdaki kodda, Tablo1, bir DataSource bileşeniDBGrid ile bağlantılıdır. Table1.Table özelliği, DBDemos Çalışan tablosuna işaret eder.

FirstName ve LastName alanlarının değerlerini gösteren sütunları otomatik olarak yeniden boyutlandırılabilecek şekilde işaretledik. Sonraki adım, Form için OnResize olay işleyicisinde FixDBGridColumnsWidth'i çağırmaktır:

prosedür TForm1.FormResize (Gönderen: TObject);
başla
FixDBGridColumnsWidth (DBGrid1);
son
;

Not: DBGrid'in Align özelliği şu değerlerden birini içeriyorsa, bunların tümü mantıklıdır: alTop, alBottom, alClient veya alCustom.

Son olarak, FixDBGridColumnsWidth prosedürünün kodu şöyledir:

prosedür FixDBGridColumnsWidth (const DBGrid: TDBGrid);
var
i: tam sayı; TotWidth: tamsayı; VarWidth: tamsayı; ResizableColumnCount: integer; AKolumn: TColumn;
başla
// yeniden boyutlandırmadan önce tüm sütunların toplam genişliği
TotWidth: = 0;
// ızgaradaki fazladan boşluk nasıl bölünür
VarWidth: = 0;
// kaç sütunun otomatik olarak yeniden boyutlandırılması gerekiyor
ResizableColumnCount: = 0;
için i: = 0 için -1 + DBGrid. Sütunlar. Miktar dobegin
TotWidth: = TotWidth + DBGrid. Kolonlar [i] .Width;
Eğer DBGrid. Kolonlar [i] .Field. Etiket 0 sonra
Inc (ResizableColumnCount);
son;
// sütun ayırıcı satırı için 1 piksel ekleyinEğer DBGrid içinde dgColLines. Seçenekler sonra
TotWidth: = TotWidth + DBGrid. Sütunlar. Miktar;
// gösterge sütun genişliği ekleEğer DBGrid'de dgIndicator. Seçenekler sonra
TotWidth: = TotWidth + Gösterge Genişliği;
// genişlik soluk "sol"
VarWidth: = DBGrid. ClientWidth - TotWidth;
// VarWidth'i eşit olarak dağıt
// otomatik olarak yeniden boyutlandırılabilir tüm sütunlara
Eğer ResizableColumnCount> 0 sonra
VarWidth: = varWidth div ResizableColumnCount;
için i: = 0 için -1 + DBGrid. Sütunlar. Miktar dobegin
AColumn: = DBGrid. Kolonlar [i];
Eğer Bir sütun. Alan. Etiket 0 thenbegin
Bir sütun. Genişlik: = AColumn. Genişlik + VarWidth;
Eğer Bir sütun. Genişlik sonra
Bir sütun. Genişlik: = AColumn. Alan. Etiket;
son;
son;
son
; (* FixDBGridColumnsWidth *)
instagram story viewer