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

DBGrid 之 SelectedRows.Count

答題得分者是:huangeider
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-20 12:09:31 IP:210.200.xxx.xxx 未訂閱
DBGrid 之 MultiSelect 可用 Ctrl鍵加滑鼠來點選 或 Shift鍵按住不放, 再按上下鍵來選擇 我將 SelectedRows.Count 寫在 DBGrid之DataSource 的 OnDataChange 事件中,如下 procedure TOneForm.DataSource1DataChange(Sender: TObject; Field: TField); begin Label1.Caption:='共選擇: ' IntToStr(DBGrid1.SelectedRows.Count) ' 筆'; end; 以 Ctrl鍵加滑鼠點選的選擇筆數沒問題, 但以 Shift鍵加上下鍵來選擇時, 第一次的筆數會少一筆, 然後連續之Shift鍵加上下鍵, 筆數都差一筆, 除非再以 Ctrl鍵加滑鼠, 筆數才正常,不知原因何在 ?
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-20 12:27:34 IP:61.231.xxx.xxx 未訂閱
試試加上 procedure TOneForm.DataSource1DataChange(Sender: TObject; Field: TField); begin Label1.Caption:='共選擇: ' IntToStr(DBGrid1.SelectedRows.Count) ' 筆'; end; procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin dbgrid1.DataSource.DataSet.Refresh; end; 這是因為用shift和crtl在未移到下一筆前dataset不會自動更新 「堅持」從洗馬桶做起 Aric 發表人 - huangeider 於 2003/11/20 14:26:47
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-20 14:12:18 IP:210.200.xxx.xxx 未訂閱
感謝 huangeider 兄, 筆數的問題解決了, 但是明顯的, 速度變慢了 請問, 可還有速度不會差太多的解決辦法 ?
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-20 14:24:43 IP:61.231.xxx.xxx 未訂閱
因為是keyup就refresh一次 除非給使用者一個按鍵 在按鍵中寫上refresh的程式碼不然程式是死的 目前小弟沒有任何方法去調整速度 「堅持」從洗馬桶做起 Aric 當SHIFT up時啟動refresh procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=vk_shift then dbgrid1.DataSource.DataSet.Refresh; end; 發表人 - huangeider 於 2003/11/20 14:57:46
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-20 16:19:10 IP:210.200.xxx.xxx 未訂閱
當SHIFT up時啟動refresh procedure TForm1.DBGrid1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if key=vk_shift then dbgrid1.DataSource.DataSet.Refresh; end; ========================================================= 感謝 huangeider 兄, 就先這麼處理了. 謝謝!!
ckc8088
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-20 17:30:28 IP:202.52.xxx.xxx 未訂閱
將 Event 寫在 DBGrid1DrawDataCell procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin Caption:=Inttostr(DBGrid1.SelectedRows.Count); end;
yandav
一般會員


發表:16
回覆:20
積分:7
註冊:2002-10-05

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-21 12:06:30 IP:210.200.xxx.xxx 未訂閱
將 Event 寫在 DBGrid1DrawDataCell procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState); begin Caption:=Inttostr(DBGrid1.SelectedRows.Count); end; ======================================================= 感謝 ckc8088 兄不吝指導, 但若照這麼做, 按 Shift 上下鍵 時, 則無任何反應 應該是此 OnDrawDataCell 事件並未被觸發 謝謝!!
系統時間:2024-05-18 11:54:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!