cxGrid之checkbox用法

在cxgrid中增加选择列

1、在dataset(query/table/clientdataset etc.)fieldeditor中增加计算字段fdSelect,datatype 为string,当然也可以其它类型。fieldkind设为fkCalculated或fkInternalCalc;设为fkInternalCalc时,应当注意在选择语句如下写:select '0' as fdselect,* from tableA,否则会报field "***" not found。设为fkCalculated时,不需要改变原语句。

object strngfldWaitInfdselect: TStringField
     FieldKind = fkInternalCalc
     FieldName = 'fdselect'
   end

2、cxgrid DbTableView中增加列cxgrdbclmnSelect,设置Properties为checkbox,具体设置如下:

object cxgrdbclmnSelect: TcxGridDBColumn
       Caption = #36873#25321
       DataBinding.FieldName = 'fdSelect'
       PropertiesClassName = 'TcxCheckBoxProperties'
       Properties.DisplayGrayed = 'nssUnchecked'
       Properties.ValueChecked = '1'
       Properties.ValueGrayed = 'nssUnchecked'
       Properties.ValueUnchecked = '0'
       MinWidth = 25
       Options.Editing = False  //重要,许多朋友讲到,不响应cellClick事件,设为false后就可响应。
       Options.Filtering = False
       Options.IncSearch = False
     end

3、根据需要在CellClick或mouseup中增加代码

var
 row: Integer;
begin
 if cxgrdbtblvwGrid1DBTableView1.ViewData.RecordCount = 0 then
   Exit;
 row := cxgrdbtblvwGrid1DBTableView1.DataController.FocusedRowIndex;
 if cxgrdbtblvwGrid1DBTableView1.ViewData.Records[row].Values[0] = '1' then
   cxgrdbtblvwGrid1DBTableView1.ViewData.Records[row].Values[0] := '0'
 else
   cxgrdbtblvwGrid1DBTableView1.ViewData.Records[row].Values[0] := '1';
end;

4、f9看下效果。

PS:fkCalculated与fkInternalCalc

Fields calculated by SQL servers or the Borland Database Engine to display the results of a query that returns a live dataset have a FieldKind of fkInternalCalc, not fkCalculated. This is because the field values are stored in the dataset. Calculated fields in a client dataset that are calculated in an event handler but stored in the dataset also have a FieldKind of fkInternalCalc instead of fkCalculated. Unlike regular calculated fields, internally calculated fields can be used in filter expressions. They can be edited, but the changes are discarded. To prevent editing, set the property to true.


联系电话:
020-00000000
联系电话:
020-00000000
联系电话:
020-12345678