全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1124
推到 Plurk!
推到 Facebook!

在grid內資料的移動

尚未結案
miga
初階會員


發表:61
回覆:92
積分:30
註冊:2002-08-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-06-29 16:19:42 IP:61.59.xxx.xxx 未訂閱
請問有辦法讓grid內被指到的該筆資料做上下移動嗎?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-06-29 22:21:36 IP:218.32.xxx.xxx 未訂閱
miga 你好: Grid...DBGrid 嗎 ? 若是, 則從 DataSet 的 Index 或是 SQL 中之 "order by" 著手, 可能比較恰當.
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-06-29 22:23:28 IP:211.20.xxx.xxx 未訂閱
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;    
系統時間:2024-07-03 5:26:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!