本文整理自网络,侵删。
当数据集有选择的时候,比如选择性打印,而且这种选择是随用户的主观意念决定时。在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;
通过上述代码设置,编译可见效果图
――――――――――――――――
原文链接:https://blog.csdn.net/lyhoo163/article/details/28108807
相关阅读 >>
Delphi 10.3.3 启动cnpack ide 专家 cnwizards coreide260.bpl错误解决办法
更多相关阅读请进入《Delphi》频道 >>