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

Dbgrid 選取的控制

答題得分者是:wameng
rita.i880
一般會員


發表:19
回覆:35
積分:10
註冊:2007-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-04 15:08:17 IP:203.69.xxx.xxx 未訂閱
 大家好 : 事件中有針對異常資料則做顏色區別,
請問要如何判斷呢?

wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-07 14:45:55 IP:61.222.xxx.xxx 訂閱
大概有幾個方向可以處理。
1. 透過 BookMarkList 的 CurrentRowSelected
由於無法 Override 可能需 MouseDown KeyPress 事件等。

2. 自己處理複選。

事實上處理 DBGrid 都是比較麻煩。
還是說一句,重寫 DBGrids 單元最快。
danny
版主


發表:100
回覆:522
積分:595
註冊:2002-03-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-07 19:06:18 IP:211.76.xxx.xxx 訂閱
我是這樣作的
1. 產生二個 TStrings (or TStringList)的物件(instance), TStrings1 是異常資料, TStrings2 是選取的資料
2. 將異常資料的 key 值(可以區分的唯一值) Add 進 TStrings1 中
3. 異常資料在 ondrawcolumncell 中用一個 function (如 FindData )
4. 選取資料用 MouseDown KeyPress 事件等(如wameng 版主所言), 選擇的資料 key 值 Add 進 TStrings2 中
5. function (如 FindData ) 找 TStrings1 及 TStrings2 的物件, TStrings1 找得到顯示另一種顏色, TStrings2 (選取的資料)再顯示另一種顏色

===================引 用 rita.i880 文 章===================
?大家好 : 事件中有針對異常資料則做顏色區別,
請問要如何判斷呢?
?
------
將問題盡快結案也是一種禮貌!
rita.i880
一般會員


發表:19
回覆:35
積分:10
註冊:2007-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-10 15:16:58 IP:203.69.xxx.xxx 未訂閱

===================引 用 wameng 文 章===================
大概有幾個方向可以處理。
1. 透過 BookMarkList 的 CurrentRowSelected
由於無法 Override 可能需 MouseDown KeyPress 事件等。
======================================================
感謝您們的回應, 想請教 wameng
有關方法一, 可否請您稍為詳細說明作法呢?TKS
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-09-10 16:56:28 IP:61.222.xxx.xxx 訂閱
突然想到還有一種解決方法,利用 HighlightCell 處理。
再次強調 自己動作做,其樂無窮。

type
TDBGrid = Class(DBGrids.TDBGrid)
Protected
function HighlightCell(DataCol, DataRow: Integer; const Value: string;AState: TGridDrawState): Boolean;Override;
Public
end;
Tform1 = Class(TForm)
...
...

function TDBGrid.HighlightCell(DataCol, DataRow: Integer; const Value: string;AState: TGridDrawState): Boolean;
begin
Result := inherited HighlightCell(DataCol, DataRow,Value,AState);
if Result and (dgMultiSelect in Options) and Datalink.Active then
begin
{ 判斷 若第一欄內容為 1169 不要被選 }
if (Columns[0].Field.AsString='1169') then
begin
SelectedRows.CurrentRowSelected := False;
Result := False;
end;
end;
end;
編輯記錄
wameng 重新編輯於 2007-09-10 16:59:22, 註解 排版亂掉。....‧
wameng 重新編輯於 2007-09-10 17:00:56, 註解 排版還是亂掉。..........................‧
rita.i880
一般會員


發表:19
回覆:35
積分:10
註冊:2007-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-11 09:30:12 IP:203.69.xxx.xxx 未訂閱
  大大您好我只是個初學者的方式太高階了實在看不懂 .......^ - ^
mypigbaby
高階會員


發表:11
回覆:168
積分:155
註冊:2006-07-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-09-11 09:43:01 IP:140.112.xxx.xxx 訂閱
謝謝版主
又學到一招了^^
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-09-11 12:37:39 IP:61.222.xxx.xxx 訂閱
大家互相學習。
我有不足的地方,也可以向您學習。

===================引 用 mypigbaby 文 章===================
謝謝版主
又學到一招了^^
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-09-11 12:38:53 IP:61.222.xxx.xxx 訂閱
看不懂?但問題被解決囉。

===================引 用 rita.i880 文 章===================
大大您好我只是個初學者的方式太高階了實在看不懂 .......^ - ^
rita.i880
一般會員


發表:19
回覆:35
積分:10
註冊:2007-07-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-09-11 14:11:17 IP:203.69.xxx.xxx 未訂閱

是個好方法, 所以還在認真研如何套用 ..
===================引 用 wameng 文 章===================
看不懂?但問題被解決囉。

===================引 用 rita.i880 文 章===================
大大您好 , 您,
rita.i880
一般會員


發表:19
回覆:35
積分:10
註冊:2007-07-23

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-09-12 11:13:57 IP:203.69.xxx.xxx 未訂閱

感恩!!!!
===================引 用 rita.i880 文 章===================

是個好方法, 所以還在認真研如何套用 ..
===================引 用 wameng 文 章===================
看不懂?但問題被解決囉。

===================引 用 rita.i880 文 章===================
大大您好 , 您,
系統時間:2024-03-29 16:59:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!