程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Indicator中添加動態Checkbox,無需綁定數據源,支持全選,indicatorcheckbox

在Indicator中添加動態Checkbox,無需綁定數據源,支持全選,indicatorcheckbox

編輯:Delphi

在Indicator中添加動態Checkbox,無需綁定數據源,支持全選,indicatorcheckbox


先做設置

DBGrideh屬性設置:

IndicatorOptions =

[gioShowRowIndicatorEh, //小三角指示

gioShowRecNoEh,    //數據源行號

gioShowRowselCheckboxesEh]  //顯示CheckBox

 

Options = [……, dgMultiSelect]  //開啟多選,才能對CheckBox進行編輯

以上設置完成,功能就有了,對於選中的行進行遍歷讀取

  for I := 0 to DBGrideh.SelectedRows.Count - 1 do
  begin
    DBGrideh.DataSource.DataSet.Bookmark := DBGrideh.SelectedRows[I];    //定位
   ……    //讀取定位後數據源其他操作
  end;

 

在以上基礎上做一個全選功能升級。 

默認DBGrideh的設置中有如下設置

AllowedSelections = [gstRecordBookmarks,gstRectangle,gstColumns,gstAll]

此時,鼠標點擊DBGrideh左上角IndicatorTitle可以觸發全選事件,不過卻無法對全選的數據記錄進行利用,查找了下DBGrideh.pas,發現了一段關鍵的代碼

procedure TCustomDBGridEh.DefaultIndicatorTitleMouseDown(Cell: TGridCoord;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  DropdownMenu: TPopupMenu;
  P: TPoint;
  ARect: TRect;
begin  
    ......
end else if (dgMultiSelect in Options) and
    DataLink.Active and ([gstRecordBookmarks, gstAll] * AllowedSelections <> []) then
  begin
    if Selection.SelectionType <> gstNon then
      Selection.Clear
    else if gstAll in AllowedSelections then
      Selection.SelectAll
    else if gstRecordBookmarks in AllowedSelections then
      Selection.Rows.SelectAll;
  end;
end;

DBGrideh是通過Bookmarks定位數據源游標行的,在此,默認設置AllowedSelections中[gstAll,gstRecordBookmarks],當觸發IndicatorTitle鼠標點擊事件時,發現上一段代碼運行是先檢查gstAll,然後檢查gstRecordBookmarks,所以雖然全選了,但是無法定位數據源游標,所以只要在AllowedSelections中去掉[gstAll]即可


   

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved