zoukankan      html  css  js  c++  java
  • DBGrid上设置选择项

        当数据集有选择的时候,比如选择性打印,而且这种选择是随用户的主观意念决定时。在DBGrid上设置选择项,就非常必要和非常有用了。
        在DBGrid上设置选择项,操作如下:


        一、加入DB单元,因为要DB相关设置。
    uses DB;

        二、在Table的字段设置一个可供选择的字段,例使用中文字段“选择”,属性:bit。

        三、显示Table的DBGrid中,将该字段设置为第1列,即DBGrid1.Columns.Items[0]。DBGrid初始化时加入下列代码:
    DBGrid3.DataSource.DataSet.Fields[0].DisplayLabel:='√';          //  设置选择列显示名称
    DBGrid3.Columns.Items[0].Width:=DBGrid1.Canvas.TextWidth('123');  //  设置选择列宽度

        四、在DBGrid1CellClick事件中,使用下列代码。功能是只要鼠标点击“选择”列,其Boolean值为原值的反值。

    procedure TPrintTableFrm.DBGrid1CellClick(Column: TColumn);
    begin
      if DBGrid1.SelectedField.DataType=ftboolean then
      begin
        with DBGrid1.DataSource.DataSet do
        begin
          Edit;
          DBGrid1.SelectedField.AsBoolean:=not DBGrid1.SelectedField.AsBoolean;
          Post;
          DBGrid1.Options:=DBGrid1.Options-[dgEditing];
        end;
      end
      else begin
        if DBGrid1.SelectedField.DataType<>ftboolean then
           DBGrid1.Options:=DBGrid1.Options+[dgEditing];
      end;
    end;
     

        五、在DBGrid1DrawColumnCell事件中,使用下列代码。功能就是重新画“选择”列上的字符。

    procedure TPrintTableFrm.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    const
      CtrlState: array[Boolean] of Integer = (DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED);
    begin
      if Column.Field.DataType = ftBoolean then
      begin
        DBGrid1.Canvas.FillRect(Rect);
        DrawFrameControl(DBGrid1.Canvas.Handle,
                         Rect,
                         DFC_BUTTON,
                         CtrlState[Column.Field.AsBoolean]);
      end;
    end;


        六、在DBGrid1TitleClick事件中,使用下列代码。功能就是只要鼠标点击“选择”列的标题,可以设置“全选”或“全非”。

    procedure TPrintTableFrm.DBGrid1TitleClick(Column: TColumn);
    var i:integer;
    begin
      if column.Index=0 then                            //验证是否第一列
      begin
        DBGrid1.DataSource.DataSet.DisableControls;
        DBGrid1.DataSource.DataSet.First;               //游标回滚
        DBGrid1.SelectedRows.CurrentRowSelected:=true;  //第一行被选中
        if trim(column.Title.Caption)='√' then
        begin
          for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
          begin
            dbgrid1.Fields[0].DataSet.edit;
            dbgrid1.Fields[0].AsBoolean:=true;
            dbgrid1.Fields[0].DataSet.post;
            dbgrid1.datasource.dataset.next;
          end;
          column.Title.Caption:='×';
        end
        else begin
          for i:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
          begin
            dbgrid1.Fields[0].DataSet.edit;
            dbgrid1.Fields[0].AsBoolean:=false;
            dbgrid1.Fields[0].DataSet.post;
            dbgrid1.datasource.dataset.next;
          end;
          column.Title.Caption:='√';
        end;
        DBGrid1.DataSource.DataSet.First;               //游标回滚
        DBGrid1.SelectedRows.CurrentRowSelected:=true;  //选中第一行
        DBGrid1.DataSource.DataSet.EnableControls;
      end;
    end;

        通过上述代码设置,编译可见效果图

    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Selenium-Xpath使用方法
    HTML基础之js
    HTML基础—DOM操作
    CSS基础知识总结二
    CSS基础知识总结之css样式引用的三种方式
    BZOJ 2329/2209 [HNOI2011]括号修复 (splay)
    BZOJ 1576 [USACO]安全路经Travel (树剖+线段树)
    BZOJ 2402 陶陶的难题II (01分数规划+树剖+线段树+凸包+二分)
    BZOJ 4044 Virus synthesis (回文自动机+dp)
    BZOJ 2342 [SHOI2011]双倍回文 (回文自动机)
  • 原文地址:https://www.cnblogs.com/jijm123/p/14923783.html
Copyright © 2011-2022 走看看