Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Tarihe göre üst başlık ekleme
#1
Selamlar;

Databaseden tarihe göre verileri Listview de listeliyorum, daha sonra listelenen verilere üst başlık eklemek için alttaki kodları kullanıyorum;
Her bir başlık bir kez eklenecek, fakat bir türlü üst başlıkları istediğim gibi yerleştiremedim.
İki faklı döngü denemedim;

1. (for S := 0 to Items.Count - 1 do) listviewde baştan başlayıp sona kadar tüm başlıkları eklemiyor;
2. (for S := Items.Count - 1 downto 0 do) sondan başlayıp en başa gidiyor fakat başlıkları üste değil de alt ekliyor.

Bu konuda ne yapabilirim?

Listview örnek:
      Üst başlık 1
Fort          12.12.2016
Reno         12.12.2016
Mercedes  12.12.2016
     Üst başlık 2
Fort          17.12.2016
Reno         17.12.2016
Mercedes  17.12.2016


procedure TForm2.UstTarih(Sender: TObject);
var
  S: Integer;
begin
  with ListViewRL do
  begin
    // for S := 0 to Items.Count - 1 do
    for S := Items.Count - 1 downto 0 do
    begin
      RLTarihEkle(Items.Item[S].SubItems[7], Items[S].Index, ListViewRL);
    end;
  end;
end;


procedure TForm2.RLTarihEkle(TarihBul: String; RowNumber: Integer;
  ListView: TListView);
var
  I: Integer;
  LI: TListItem;
  BoolBulundu: Boolean;
begin
  with ListViewRL do
  begin
    if Items.Count > 0 then
    begin
      BoolBulundu := False;
      I := 0;
      while (I < Items.Count) And (Not BoolBulundu) do
      begin
        if Pos(TarihBul, Items[I].SubItems[2]) > 0 then
          BoolBulundu := True;
        Inc(I);
      end;
      if Not BoolBulundu then
      begin
        LI := ListViewRL.Items.Insert(RowNumber + 1);
        LI.Caption := 'Tarihi';
        LI.SubItems.Add(' ');
        LI.SubItems.Add(' ');
        LI.SubItems.Add(TarihBul); /// ÜST BAŞLIK
        LI.SubItems.Add(' ');
        LI.SubItems.Add(' ');
        LI.SubItems.Add(' ');
        LI.SubItems.Add(' ');
        LI.SubItems.Add(' ');
      end;
    end;
  end;
end;
Hayat bazen güzel olabiliyor.
Cevapla
#2
Ben olsam şöyle bir çözüm kullanırdım (ListView'e eklenen verilerin tarihe göre sıralı olduğunu varsayıyorum):
Üst başlık olarak eklenecek tarihleri bir TStringList içinde tutardım. Böylece bir tarih eklemeden önce daha önce eklenip eklenmediğini kontrol etmek kolay olur.

var
  LI: TListItem;
  I: Integer;
  EklenenTarihler: TStringList;
  Tarih: String;
begin
  EklenenTarihler := TStringList.Create;
  try
    I := 0;
    while (I < ListViewRL.Items.Count) do
    begin
      Tarih := ListViewRL.Items[I].SubItems[0]; // Tarih bilgisi hangi SubItem'dan alınacaksa onun index'i kullanılmalı
      if EklenenTarihler.IndexOf(Tarih) = -1 then // Daha önce EKLENMEMİŞ bir başlık bulundu demektir
      begin
        EklenenTarihler.Add(Tarih);
        // BURADA YENİ SATIRI INSERT EDEBİLİRİZ
        LI := ListViewRL.Items.Insert(I);
        //...
        //...
      end;
      Inc(I);
    end;
  finally
    EklenenTarihler.Free;
  end;
end;
There's no place like 127.0.0.1
WWW
Cevapla
#3
(19-12-2016, Saat: 15:57)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBen olsam şöyle bir çözüm kullanırdım (ListView'e eklenen verilerin tarihe göre sıralı olduğunu varsayıyorum):
Üst başlık olarak eklenecek tarihleri bir TStringList içinde tutardım. Böylece bir tarih eklemeden önce daha önce eklenip eklenmediğini kontrol etmek kolay olur.

var
  LI: TListItem;
  I: Integer;
  EklenenTarihler: TStringList;
  Tarih: String;
begin
  EklenenTarihler := TStringList.Create;
  try
    I := 0;
    while (I < ListViewRL.Items.Count) do
    begin
      Tarih := ListViewRL.Items[I].SubItems[0]; // Tarih bilgisi hangi SubItem'dan alınacaksa onun index'i kullanılmalı
      if EklenenTarihler.IndexOf(Tarih) = -1 then // Daha önce EKLENMEMİŞ bir başlık bulundu demektir
      begin
        EklenenTarihler.Add(Tarih);
        // BURADA YENİ SATIRI INSERT EDEBİLİRİZ
        LI := ListViewRL.Items.Insert(I);
        //...
        //...
      end;
      Inc(I);
    end;
  finally
    EklenenTarihler.Free;
  end;
end;

Selam;
Hocam cevabınızı çok geç gördüm; Kendime göre uyarlamaya çalıştım fakat çıkamadım için içinden.
Başlık eklerken Ford için ayrı Mercedes için ayrı başlıklar nasıl ekleye bilirim, aynı tarih ikinci kez olabilir burada önemli olan kategorler.

procedure TForm5.BaslikEkle(Sender: TObject); 
begin
TarihEkle := TStringList.Create;
try
  I := 0;
  while (I < RPLList.Items.Count) do
  begin
    Tarih := RPLList.Items[I].SubItems[11]; // Tarih hangi SubItem'da
    if Pos(RPLList.Items[I].SubItems[6],'FORD')> 0 then
    begin
    if TarihEkle.IndexOf(Tarih) = -1 then
    begin
      TarihEkle.Add(Tarih); // Yeni satır insert ediyoruz
      LI := RPLList.Items.Insert(I);
      LI.Caption := ' ';
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
      LI.SubItems.Add(FormatDateTime('dd/mm/yyyy dddd', StrtoDate(Tarih)));
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
      LI.SubItems.Add('$F0CAA6');
      LI.SubItems.Add('$000000');
      LI.SubItems.Add('Bold');
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
      LI.SubItems.Add(' ');
    end;
    Inc(I);
  end;
  end;
finally
  TarihEkle.Free;
end;
RPLNewRow(Sender);
end;
Hayat bazen güzel olabiliyor.
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Quick Report ile boş satır ekleme boreas 1 66 10-04-2018, Saat: 18:53
Son Yorum: boreas
  Fastreport koşula göre gösterim klavye 4 188 17-03-2018, Saat: 17:29
Son Yorum: klavye
  Başlık ekleme Dostk 2 254 01-02-2018, Saat: 14:23
Son Yorum: Abdullah ILGAZ
Smile Bileşenden bileşen türetme veya özellik ekleme Lord_Ares 3 385 11-12-2017, Saat: 13:40
Son Yorum: mad85
Question Uzak Bir Bilgisayar İçin Port Ekleme? hyperxman 21 1.022 22-11-2017, Saat: 00:03
Son Yorum: nguzeller



Konuyu Okuyanlar: 1 Ziyaretçi