Dbgrideh 动态checkBox 列生成技巧

                Dbgrideh 动态checkBox 列生成技巧

 

在运用DBGRIDEH控件开发过程中,经常需要对表格内的数据进行选定后处理,通常做法是在表格记录的前面增加个checkbox来选定该记录。如果事先知道对应的数据集合的各字段的内容,则可以为DBGRIDEH增加相应的列,并设定列的属性,当然某列可以设置为checkbox显示的方式。

   而在我开发实践中,尽量避免为DBGRID增加固定列的方法,因为会对以后程序的维护带来困难。我一般倾向于动态生存各dbgrid列,就是说执行查询时才生成。如果是这样,则设置为checkbox的列就需要动态设置了。这里主要使用创建了一个Tstringlist来过渡,举例如下。

一、存储过程的select 语句

   Select Decode(Status, 'R', '1', '0') Flag, --标志为checkbox的列

 Carno, Model, Drivername,Driverno,Peccancyno,

  From c_Viewonpeccancy
                 Where Dispatchflag =
'4' --后台已接收

                     And Operationsort =
'891' --业务
                     And Ctrlbureau = p_Tcbranchid
                     And (Status =
'Q' Or Status = 'R')
                     And Rjflag =
'0'

                     And Acptdate Between p_Bdate And p_Edate;

二、Dephi源码

执行查询按钮,返回数据后设置,执行setcheckbox(0)会设置dbgrid里第一列为checkbox显示方式。 

该方法的实现如下,

procedure Tc_BKPenaltyFrm.SetCheckBox(i: integer);

var

  checklist: Tstringlist;

begin

  if pDbgrideh1.DataSource.DataSet.Active = True then

  try

    checklist := Tstringlist.Create;  --创建tstringlist列表

    checklist.Insert(0, '1'); --增加内容

    checklist.Insert(1, '0');

    pDBGridEh1.Columns[i].Checkboxes := True;

    pDBGridEh1.Columns[i].KeyList := checklist;

    pDBGridEh1.Columns[i].Title.TitleButton := False;

  finally

    checklist.Free;

  end;

  pDBGridEh1.Columns[i].ReadOnly := False;

end;

   checkbox列的更改会导致数据集的变化,而遍历数据集合就可以实现对选定记录的批量处理。

你可能感兴趣的:(Dbgrideh 动态checkBox 列生成技巧)