dbgrid
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
dbgrid
kendi dbgridimde windows adres defterindeki gibi dbgridin titleclick olayındaki asağı yukarı ok işaretlerinin olması için ne yapmak gerekir
uğrastım Headercontrol le yapmak sağlıklı olmuyor.sutun boyları falan ayalarmıyor.datebase de birbirinden faklı bir sürü tabloda kullanacağım.hazır compenent daha mantıklı ve kolay olur.
saatlerdir uğrasıyorum google arattırdım bir sürü dosya download ettim ama coğunda eksik dosya hata veriyor.sadece demo exe olarak bulabiliyorum.
tam olarak eksiksiz download edebilceğim ve yüklemesini anlatan bir adres verebilirmisiniz?
saatlerdir uğrasıyorum google arattırdım bir sürü dosya download ettim ama coğunda eksik dosya hata veriyor.sadece demo exe olarak bulabiliyorum.
tam olarak eksiksiz download edebilceğim ve yüklemesini anlatan bir adres verebilirmisiniz?
Ben kolon başlığına göre sıralamayı şu şekilde yapıyorum:
Ok la göstermek içinse DbGridin Üst kısmında bir panel var, panelin içindede ImgOk diye bi image nesnesi var. Onu Kolon hizasına kaydırıyorum. Sonra TQuery ile sorgulamayı ona göre yapıyo. Ama sadece seçilen kolonu artan sıralama yapıyo. Biraz uğraşırsan diğerinide ekleyebilirsin...
Ok la göstermek içinse DbGridin Üst kısmında bir panel var, panelin içindede ImgOk diye bi image nesnesi var. Onu Kolon hizasına kaydırıyorum. Sonra TQuery ile sorgulamayı ona göre yapıyo. Ama sadece seçilen kolonu artan sıralama yapıyo. Biraz uğraşırsan diğerinide ekleyebilirsin...
Kod: Tümünü seç
procedure TForm_Ana.DBGrid1TitleClick(Column: TColumn);
var
sol:integer;
begin
if dbgrid1.FieldCount <> 0 then
begin
//showmessage(inttostr(column.Index));
case column.Index of
0: ImgOk.Left := 30;
1: ImgOk.Left := 90;
2: ImgOk.Left := 150;
3: ImgOk.Left := 220;
4: ImgOk.Left := 300;
5: ImgOk.Left := 400;
end;
SqlOrder := ' ORDER BY ' + column.Title.Caption;
QAra.Close;
QAra.SQL.Clear;
QAra.SQL.Add('SELECT * FROM tablo' + SqlOrder);
QAra.Open;
end;
end;
Hazır komponentin neresinde ne olabilir ki. Eminim oda HeaderControl ile DBGridin evlendirilmesinden oluşuyordur.metemete yazdı:uğrastım Headercontrol le yapmak sağlıklı olmuyor.sutun boyları falan ayalarmıyor.datebase de birbirinden faklı bir sürü tabloda kullanacağım.hazır compenent daha mantıklı ve kolay olur.
Şimdi bu mantıkla denedim oldu. isterseniz üzerinde çalışıp ayrı bir komponent olarak derleyebilirsiniz.
1 HeaderControl
default özellikleri uygun.
1 DBGrid
ColumnResize = false
--------------
DBGrid in Column özelliklerinde ne yapıyorsanız aynısını HeaderControl içinde yapın. Caption, Width gibi.
HeaderControlun ilk Sectionu Width = 13 ve text = boş
Yukarıdaki işlemleri zaten kendiniz görsel ayarlarsınız.
Benim asıl vurgulamak istediğim kod formun OnCreate olayına yazılacak olan.
Kod: Tümünü seç
HeaderControl1.Parent = DBGrid1;
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Zaten üzerinde çalışılsa demek istediğim buydu.
Yani Section->Width ile Column->Widt arasında parent bağı kurulursa hiç bir sorun kalmaz diye düşünüyorum. Ama zorluk derecesi hakkında bişey diyemem.
Edit..............
Aklıma takıldı aşağıdaki gibi builderde yaptım. işinize yararsa delphiye çevirmesi kolay sanırım.
Birde full screen pozisyonundan sonra sığmayan colonlar DBGrid in scroolu ile kaydırılabiliyor ama HeaderControl kaymıyor. o biraz kasacak. Uğraşan olursa bizde kazanırız.
Yani Section->Width ile Column->Widt arasında parent bağı kurulursa hiç bir sorun kalmaz diye düşünüyorum. Ama zorluk derecesi hakkında bişey diyemem.
Edit..............
Aklıma takıldı aşağıdaki gibi builderde yaptım. işinize yararsa delphiye çevirmesi kolay sanırım.
Birde full screen pozisyonundan sonra sığmayan colonlar DBGrid in scroolu ile kaydırılabiliyor ama HeaderControl kaymıyor. o biraz kasacak. Uğraşan olursa bizde kazanırız.
Kod: Tümünü seç
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Header->Parent = DBGrid;
Header->Sections->Insert(DBGrid->Columns->Count + 1);
Header->Sections->Items[0]->Width = 13;
for(int i = 0; i <= DBGrid->Columns->Count - 1; i++) {
Header->Sections->Add();
Header->Sections->Items[i+1]->Width = DBGrid->Columns->Items[i]->Width + 1;
Header->Sections->Items[i+1]->Text = DBGrid->Columns->Items[i]->FieldName;
}
}
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Oluyor
evet epey yol aldık.çözeceğiz bu işi az kaldı. 
1.şuanda kaydırma işlemini yapmaya calısıyorum. boşbir image ve scrollbar ekledim kaydırmayı sağlamak için.image nin boyutunu dbgrid boyutuna eşitleyeceğim fakat DbGrid in MaxWidth değerini bulamadım ? (form üzerindeki boyu değidel kapladığı genişlik değerini nasıl bulurum)
2.headercontrolde kullanacağım imagelistdeki resimleri(aşağı yukarı ok resimlerini) tıklayınca değişmesini nasıl sağlarım

Kod: Tümünü seç
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
{ Dbgrid Options DgIndicator = false
Dbgrid Options DgColumnResize = false olarak değiştir }
HeaderControl1.Parent := DBGrid1;
for i:= 0 to DbGrid1.Columns.Count-1 do begin
HeaderControl1.Sections.Add();
HeaderControl1.Sections.Items[i].Width :=DbGrid1.Columns[i].Width+1;
HeaderControl1.Sections.Items[i].Text := DbGrid1.Columns.Items[i].FieldName;
end;
2.headercontrolde kullanacağım imagelistdeki resimleri(aşağı yukarı ok resimlerini) tıklayınca değişmesini nasıl sağlarım
DBGrid in sol kenarındaki hangi kayıtta olduğunuzu belirten ok işareti için ayrılan bölüm adına Header in ilk section unun width = 13 değerinde ve text siz olması gerekiyor. sanırım onu atlamışsınız. bu durumda tüm sections lar kayık olacak gibi. Tabi bunun içinde for döngüsünde
Sections.Items[i + 1] şeklinde kullanmak gerekecek.
Sections.Items[i + 1] şeklinde kullanmak gerekecek.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
dbgrid uzunluğu?
Dbgrid Options DgIndicator = false değerini değiştirdigimiz zaman
dbgrid in sol gri sutunu yok olur.sorunsuz calısıyor.
benim asıl öğrenmek istediğim
DbGrid in form üzerindeki witdh boyu değil kaydırma çubukları ile ilerleyince görülen boyunu öğrenmek istiyorum???
yani şöle bir komut olmuyor. Dbgrid.Maxwidth?
bunuda nicin öğrenmek istiyorum Dbgridin çok geniş oldunu düşünürsek.
sağ okla dbgridin diğer sutunlarını görmek istediğimde headercontrolda diğer alanlarını görmek için çalısıyorum[/b]
dbgrid in sol gri sutunu yok olur.sorunsuz calısıyor.
benim asıl öğrenmek istediğim
DbGrid in form üzerindeki witdh boyu değil kaydırma çubukları ile ilerleyince görülen boyunu öğrenmek istiyorum???
yani şöle bir komut olmuyor. Dbgrid.Maxwidth?
bunuda nicin öğrenmek istiyorum Dbgridin çok geniş oldunu düşünürsek.
sağ okla dbgridin diğer sutunlarını görmek istediğimde headercontrolda diğer alanlarını görmek için çalısıyorum[/b]
Re: dbgrid uzunluğu?
for döngüsünde bir integer değişkene toplatıp kullanabilirsiniz.metemete yazdı: benim asıl öğrenmek istediğim
DbGrid in form üzerindeki witdh boyu değil kaydırma çubukları ile ilerleyince görülen boyunu öğrenmek istiyorum???
yani şöle bir komut olmuyor. Dbgrid.Maxwidth?
Kod: Tümünü seç
w += DBGrid1.Columns.Items[i].Width + 1;
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Re: dbgrid uzunluğu?
Kod: Tümünü seç
w += DBGrid1.Columns.Items[i].Width + 1;
şuana kadar istediğim column da tıklanıldığında asağı yukarı ok cıkıyor, sıralama yapabiliyor ve sadece secılen columnda yukarı aşağı oklarını cıkarttırıyom.peki en son haliyle hepsini tekbir compenant diye tanımlayabilirmiyim?ne yapmak lazım?
yukarı aşağıda yapmak için ;
DbGrid satır uzunluğunu nasıl hesaplarım ?