zoukankan      html  css  js  c++  java
  • 在Indicator中添加动态Checkbox,无需绑定数据源,支持全选

    先做设置

    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.Selection.Rows.SelectAll;    //全选,此时  SelectionType=gstRecordBookmarks
    //下面会提到一个AllowedSelections,结合下文,这里不能用DBGrideh.Selection.SelectAll, 它的SelectionType=gstAll
    DBGrideh.Selection.Clear; //全部取消

    在以上基础上做一个全选功能升级。 

    默认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]即可

    -----------------------------------

    回复中有人提出通过此种方法,点击DBGrideh任意地方,所选行容易消失

    解决方法是设置DBGrideh中OptionsEh,使dghClearSelection=false

    设置如下

    OptionsEh = [..., dghClearSelection, ...]//,此内dghClearSelection去掉
        

       

  • 相关阅读:
    AjaxPro.HttpSessionStateRequirement.ReadWrite
    C#关键字abstract virtual interface new override
    ASP.NET ViewState详解
    DataTable的Select方法
    DWR学习笔记 Hello World
    JSP标签分页实现
    php图片验证码类
    使用php发送Http请求,抓取网页数据
    JdbcTemplate 排序查询结果不一致问题
    ANT 和 JDK 的设置
  • 原文地址:https://www.cnblogs.com/jupt/p/4291902.html
Copyright © 2011-2022 走看看