dbgrid

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

dbgrid

Mesaj gönderen metemete »

kendi dbgridimde windows adres defterindeki gibi dbgridin titleclick olayındaki asağı yukarı ok işaretlerinin olması için ne yapmak gerekir
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Mesaj gönderen warder »

Konuyla ilgili hazır birşey varmı bilmiyorum.
DBGrid in Title özelliğini (false) ve HeaderControl un ImageIndex özelliğini uygun şekilde değirlendirirseniz istediğiniz olur, olmasına da , çok mu zor olur acep.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

ben yapmıstım headercontrol ile ama sutun sayısı artınca header ile dbgridin arasında acıklık oluyordu bir turlu asamadım
RxDbGrid title click olayına sahip resim olayınıda bir sekilde hallederseniz yapılabilir.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tıkladığın başlığın alanınagöre sıralamayı, DataSet in eğer bir sorgu(Query) ise yapman kolay. Bu işi direkt yapan QuantumGrid gibi bileşenler de deniyebilirsin.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

Mesaj gönderen metemete »

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?
Kullanıcı avatarı
salvation
Üye
Mesajlar: 303
Kayıt: 22 Mar 2004 01:57
Konum: Eskişehir
İletişim:

Mesaj gönderen salvation »

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...

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;
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Mesaj gönderen warder »

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.
Hazır komponentin neresinde ne olabilir ki. Eminim oda HeaderControl ile DBGridin evlendirilmesinden oluşuyordur.
Ş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;
Bu kodla HeaderControl DBGridin titlesine yerleşecek. Eğer DBGrid in titlesini false yapmışsanız o zaman ilk veri satırı görünmeyecek. Sanırım bunu istemezsiniz. HeaderControl un Align i zaten alTop geliyor.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bi denemek lazım bu sekilde
ben yaparken parent form haliyle
bu sekilde dusunmemistim
ama bende soyle bir sorun cıkıyordu
4-5 sutun icin sorun yok sayı arttıkca header ile grid sutun cizgileri kaymaya baslıyordu
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Mesaj gönderen warder »

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.

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...
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

Oluyor

Mesaj gönderen metemete »

evet epey yol aldık.çözeceğiz bu işi az kaldı. :)

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;
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
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

header sutunlarını boyutlandırdıgın zaman grid sutunlarını da ayarlaman lazım
aslında uzerinde braz calısılsa bilesen haline getirebilirzi
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Mesaj gönderen warder »

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.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

dbgrid uzunluğu?

Mesaj gönderen metemete »

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]
Kullanıcı avatarı
warder
Üye
Mesajlar: 255
Kayıt: 10 Mar 2004 04:59

Re: dbgrid uzunluğu?

Mesaj gönderen warder »

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?
for döngüsünde bir integer değişkene toplatıp kullanabilirsiniz.

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...
Kullanıcı avatarı
metemete
Üye
Mesajlar: 422
Kayıt: 21 Mar 2004 12:30
Konum: samsun
İletişim:

Re: dbgrid uzunluğu?

Mesaj gönderen metemete »

Kod: Tümünü seç


        w += DBGrid1.Columns.Items[i].Width + 1;

evet oldu tsk.header ile dbgridin aynı anda sağ sol kaydırma işlemini yaptım.
ş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 ?
Cevapla