1. 程式人生 > >如何在DBGrid裡實現Shift+“選擇行”區間多選的功能!

如何在DBGrid裡實現Shift+“選擇行”區間多選的功能!

DELPHI 的TDBGrid 控 件 主 要 用 來 處 理 數 據 表, 它 的 屬 性 中 有 
一 個dgMultiSelect, 若 此 屬 性 設 定 為TRUE, 則 可 以 選 中 多 個 記 錄
( 可 用CTRL + 鼠 標 左 鍵 選 擇 多 個 記 錄)。 對 選 中 的 多 個 記 錄
可 以 有 以 下 幾 種 處 理 方 式, 比 較 簡 單 的 兩 種 是: 清 除 所 有
的 選 擇 記 錄 可 用DBGrid1.SelectedRows.Clear 語 句; 刪 除 所 有 的 選 
擇 記 錄 可 用DBGrid1.SelectedRows.Delete 語 句。 但 如 果 想 獲 得 選 中 
的 所 有 記 錄 的 其 他 信 息, 比 如, 在 單 獨 的 一 個 窗 體 中 顯 示
用 戶 選 擇 的 記 錄 的 第 一 個 字 段 的 內 容( 如 所 有 選 擇 的 姓 名)
如 何 處 理 呢 ? 這 就 要 使 用 書 籤 功 能 了, 下 面 是 筆 者 編 寫 的
一 個 程 序 中 的 過 程, 用 來 將 用 戶 選 擇 的 多 個 記 錄 集 中 顯 示 
在 另 外 一 個 窗 體 中( 筆 者 使 用 的 是DELPHI4), 供 參 考 使 用。


procedure GetSelectedRecord
(DataSet : TDataSet; FieldName : String;
BookmarkList : TBookmarkList; Strings : TStrings);
file://這個過程中的引數分別為:資料表、欄位名稱、
書籤、用來儲存所選欄位內容的
file://字串(用於將內容傳遞到另
一個單獨窗體中的TLIST控制元件中)
var
I: Integer;
bm : TBookMark;
begin
Strings.Clear;
with Dataset do begin
DisableControls;
bm := GetBookMark;
try
file://每個選擇的記錄都有一個書籤標誌,
這就為處理它們提供了條件
for I := 0 to BookmarkList.Count - 1 do begin
Bookmark := BookmarkList[I];
Strings.Add(DataSet.FindField(fieldname).AsString);
end;
finally
GotoBookMark(bm);
FreeBookMark(bm);
EnableControls;
end;
end;
end;

呼叫舉例:
GetSelectedRecord(Table1, 'NAME', DBGrid1.SelectedRows, 
Form2.ListBox1.Items