Hai sobat yadishare sudah lama banget nih rasanya saya ngga posting artikel atau tutorial mengenai delphi. Nah mumpung lagi ada waktu saya mau posting sedikit tutorial mengenai cara sortir data menggunakan komponen TStringGrid.
Ketika kita mencoba menampilkan data menggunakan komponen TStringGrid yang secara default tidak bisa otomatis melakukan sortir data ketika column headernya di click, maka kita harus melakukan sedikit coding agar hal itu bisa terlaksana.
Nah gimana caranya ? Yuk kita buka dulu IDE Delphi XE kita. Disini saya menggunakan RAD Studio XE5. Kemudian kita buat new project dengan cara membuka menu File > New > VCL Forms Application - Delphi.
Atur settingan form sesuai dengan kebutuhan. Kemudian tambahkan 1 buah TLabel dan 1 buah TStringGrid ke dalam form. Nah tampilannya akan jadi seperti ini nih :
Kalau sudah sekarang kita bisa masuk ke tahap coding. Nah silahkan di copy paste dan di sesuaikan dengan nama komponen dan form yang kalian gunakan yah...
[code language = "delphi"]
unit U_Gridsort;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
procedure SortGrid(Grid : TStringGrid; SortCol:integer);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure Tform1.Sortgrid(Grid : TStringGrid; SortCol:integer);
var
i,j : integer;
temp:tstringlist;
begin
temp:=tstringlist.create;
with Grid do
for i := FixedRows to RowCount - 2 do
for j:= i+1 to rowcount-1 do
if AnsiCompareText(Cells[SortCol, i], Cells[SortCol,j]) > 0
then
begin
temp.assign(rows[j]);
rows[j].assign(rows[i]);
rows[i].assign(temp);
end;
temp.free;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
totwidth:integer;
begin
with stringgrid1 do
begin
for j := 1 to rowcount-1 do
for i:= 1 to colcount-1 do
cells[i,j]:=format('%3d',[random(1000)]);
for i:= 1 to rowcount-1 do cells[0,i]:='baris '+ format('%2d',[i]);
totwidth:=0;
for i:= 0 to colcount-1 do
begin
cells[i,0]:='kolom '+ inttostr(i+1);
colwidths[i]:=defaultcolwidth+random(48);
inc(totwidth,colwidths[i]);
end;
width:=totwidth+(colcount+3)*gridlinewidth;
end;
end;
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
c,j:integer;
rect:trect;
begin
with stringgrid1 do
if y<rowheights[0] then
begin
for j:= 0 to colcount-1 do
begin
rect := cellrect(j,0);
if (rect.Left x) then
begin
c := j;
break;
end;
end;
sortgrid(stringgrid1,c);
end;
end;
end.
[/code]
Ok selesai. Pada saat form dijalankan, teman-teman akan melihat ada data yang tampil disana. Padahal kita tidak mengisikan data apapun atau mengambil data dari database. Kok bisa ? Ya tentu saja bisa. Karena pada saat form di create kita telah menuliskan kode untuk menampilkan data secara acak. Lebih tepatnya pada bagian ini nih :
[code language = "delphi"]
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:integer;
totwidth:integer;
begin
with stringgrid1 do
begin
for j := 1 to rowcount-1 do
for i:= 1 to colcount-1 do
cells[i,j]:=format('%3d',[random(1000)]);
for i:= 1 to rowcount-1 do cells[0,i]:='baris '+ format('%2d',[i]);
totwidth:=0;
for i:= 0 to colcount-1 do
begin
cells[i,0]:='kolom '+ inttostr(i+1);
colwidths[i]:=defaultcolwidth+random(48);
inc(totwidth,colwidths[i]);
end;
width:=totwidth+(colcount+3)*gridlinewidth;
end;
end;
[/code]
Dan hasilnya akan menjadi seperti ini ketika programnya dijalankan :
Ok sobat yadishare segitu dulu tutorial yang dapat saya sharing kali ini, semoga ada manfaatnya buat kita semua. Tetap belajar dan amalkan terus ilmu yang kita punya, mampir terus ke blog saya dan jangan lupa untuk terus menonton video-video tutorial saya yang ada di youtube. Please like, share and subscribe ya... :) sampai jumpa.
Comments
Post a Comment