在grid內資料的移動 |
尚未結案
|
miga
初階會員 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
Chance36
版主 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
miga 你好
1.若Grid是stringGrid的話,只要上下列交換資料即可 Var Str: String; begin // 第一列與第二列互換 str := StringGrid1.Rows[1].Text; StringGrid1.Rows[1].Text := StringGrid1.Rows[2].Text; Stringgrid1.Rows[2].Text := str ; end; 2.若Grid是dbGrid的話,就有點麻煩了,也有些限制 1.dbGrid是反應Datasource所連結的DataSet的資料內容,若要資料錄能上下 交換移動,必須從該DataSet來著手。 2.有那些DataSet元件能改變資料錄的排列方式呢? 2-1 TTable 可以使用IndexName 使用資料庫原有的索引,但必須改其索引鍵值才會改變記錄的排列方式 2-2 TQuery利用SQL指令的Order By 可以排列料錄,同樣的必須改變鍵值欄位值後才會反應其順序 2-3 TAdoDataSet等數個資料集元件,基本上與TTable及TQuery必須以同樣的方式才能改變資料錄排列方式。 2-4 TAdoDataSet好像可以可以做Client端的臨時索引,但我不清楚,也沒實作過。 2-5 TClientdataSet 對於動態索引可以說是它的專長(當然還有其他的特長), 3.結果是利用ClientDataSet的動態索引,應可以達你的需求, 物件關聯如下 CDS -> DataSetprovider->TDataset CDS.Close; cds.CommandText := 'Select * , 0 As BeIndex From xxxxxx ....' ; CDS.Open; CDS.LogChanges := False; With CDS Do Begin First; While Not Eof Do Begin Edit; FieldByName('BeIndex').AsInteger := RecNo ; // 先把RecNo放到BeIndex 中 post; next; End; First; End; CDS.IndexFieldNames := 'BeIndex' ; 當有需求時只要交換 BeIndex 值即可 // 與前一筆交換 Var S1,S2 : Integer ; bm : TBookMark ; Begin bm := CDS.GetBookMark; // 先記錄目前位置 S1 := CDS.FieldByName('BeIndex').AsInteger; // 記錄目前索引值 CDS.Prior; // 往前一筆 S2 := CDS.FieldByName('BeIndex').AsInteger; // 記錄前一筆的索引值 CDS.Edit; CDS.FieldByName('BeIndex').AsInteger := S1; // 更改前一筆的索引值 CDS.Post; CDS.GotoBookMark(bm); // 回到原來那一筆記錄,千萬不可用CDS.Next; 因為經索引後次序會變 CDS.Edit; CDS.FieldByName('BeIndex').AsInteger := S2; // 更改目前記錄的索引值 CDS.Post; End; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |