2016-02-24 28 views
5

Izgarayı sıralamak istiyorum. Bir bellek tablosu oluşturdum ve veri kaynağı olarak ızgaraya bağladım. Bir nxQuery nesnesinden bellek tablosuna veri ekliyorum. Sıralama için indeksini de bellek tablosuna eklemem gerekiyor. Izgara tablosunu kullanarak ızgarayı sırala

Bu

eklenmesi ve olay

nxMemTable1.IndexDefs.Clear; 
nxMemTable1.FieldDefs.Clear; 

nxMemTable1.FieldDefs.Add('packpatientid', ftInteger, 0, False); 
nxMemTable1.FieldDefs.Add('firstname', ftString, 10, False); 
nxMemTable1.FieldDefs.Add('lastname', ftString, 10, False); 
while not nxQuery1.EOF do 
begin 
    nxMemTable1.Append; 
    nxMemTable1.FieldByName('packpatientid').AsInteger := nxQuery1packpatientid.AsInteger; 
    nxMemTable1.FieldByName('firstname').AsString := nxQuery1firstname.AsString; 
    nxMemTable1.FieldByName('lastname').AsString := nxQuery1lastname.AsString; 
    nxMemTable1.Post; 
end; 

oluşturmak formda parçasını ekleme endeksidir ve bu i hafıza masayı sıralamak çalışıyorum kodudur

procedure TForm1.Button2Click(Sender: TObject); begin nxMemTable1.IndexFieldNames := 'firstname'; end;

ama bu çalışmıyor. Düğmeye tıkladığımda "Alan adı dizini yok" ifadesi "

+0

Belki de bu konu size yardımcı olabilir: http://stackoverflow.com/a/2350500/5470883 –

+0

Yüzünde, nxMemTable1.IndexFieldNames ataması çalışmalıdır. Eğer o değilse, nxMemTable1'in sorgusunu sormanız gerektiğini düşünüyorum, çünkü bir hataya benziyor. Verileri başka bir veri kümesinden kopyalamak yerine kod içinde oluşturan bir örnek oluşturun. – MartynA

cevap

4

" Bu, TClientDataSet standardı ile çalışır.

Ben, yeni bir VCL Forms proje oluşturduktan form üzerinde bir TClientDataSet düştü ve kod basitlik için o CDS adını verdi. Sonra, onun DataSet özelliğine CDS atanan TDataSource, eklenen bir TDBGrid eklendi ve onun DataSource olarak DataSet1 atanan. Daha sonra, Form1.OnCreate olayı için bir tane ve DBGrid1. OnTitleClick olayı için bir tane olmak üzere iki olay işleyicisi oluşturdum. (Zaten o sütuna göre sıralanmış değilse)

procedure TForm1.DBGrid1TitleClick(Column: TColumn); 
var 
    sField: string; 
begin 
    sField := Column.FieldName; 
    if sField <> CDS.IndexFieldNames then 
    CDS.IndexFieldNames := sField; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
    CDS.FieldDefs.Add('LastName', ftString, 30); 
    CDS.FieldDefs.Add('FirstName', ftString, 30); 
    CDS.FieldDefs.Add('ID', ftInteger); 
    CDS.CreateDataSet; 
    CDS.AppendRecord(['Smith', 'John', 3]); 
    CDS.AppendRecord(['Doe', 'Jane', 1]); 
    CDS.AppendRecord(['Adams', 'Quincy', 2]); 
    CDS.IndexFieldNames := 'LastName'; 
end; 

uygulamayı çalıştıran ve sütun başlıklarından birini tıklayarak hemen o sütuna göre DBGrid sıralar.

+0

Mükemmel çalışıyor. teşekkürler Ken – Ishanka

İlgili konular