码迷,mamicode.com
首页 > 其他好文 > 详细

cxGrid之checkbox小结

时间:2018-03-13 21:59:46      阅读:915      评论:0      收藏:0      [点我收藏+]

标签:ext   单选   object   tom   return   gray   form   mouse   sea   

http://www.cnblogs.com/Kim53622744/p/4428997.html

在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.

 

 

Delphi cxgrid 使用方法
1.绑定数据
方法
cxGrid1DBTableView1.DataController.DataSource:=DataSource1
2.去掉"Drag   a   column   header   here   to   group   by   that   column"
方法
cxGrid1DBTableView1.OptionsView.GroupByBox置为False
3.去掉表头下三角数据 
方法
cxGrid1DBTableView1.Optionscustomize.columnfiltering置为False
4.增加序号
方法
在dataset 里边增加 Mycount 字段 类型为 string
在 CXgrid 增加显示字段 序号 mycount
为该字段写事件
procedure Tfrm_form.ReDataSet2mycountGetText(Sender: TField;
  var Text: String; DisplayText: Boolean);
begin
  inherited;
  text:=inttostr(redataset2.RecNo);
end;

将 序号 绑定 字段 Mycount

5.CXgrid 增加一栏显示checkBox
方法
在dataset 里边增加 MySelect字段 类型为 BOOLEAN 

在 CXgrid 增加显示字段 选择 select 

设定select 字段的Properties为 CheckBox .  ReadOnly = False;
NullStyle = nssUnchecked 

procedure Tfrm_form.cxGrid1DBTableView1CellClick(
  Sender: TcxCustomGridTableView;
  ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
  AShift: TShiftState; var AHandled: Boolean);
var
  Row: Integer;
begin
  inherited;

  if ACellViewInfo.Item.Name = ‘mycheck‘ then
  begin
    Row := cxGrid1DBTableView1.DataController.FocusedRecordIndex;
    if cxGrid1DBTableView1.ViewData.Records[Row].Values[0] = True then
      cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := False
    else
      cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := True;
  end;

end; 



procedure Tfrm_form.cxGrid1DBTableView1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  Row: Integer;
begin
  inherited;
  //单选
  // for Row:=0 to  cxGrid1DBTableView1.DataController.RecordCount-1 do
  // begin
  //   cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := False;
  // end;
  //多选
    if  cxGrid1DBTableView1.DataController.RecordCount<>0 then
  begin
   Row := cxGrid1DBTableView1.DataController.FocusedRecordIndex;

  if cxGrid1DBTableView1.ViewData.Records[Row].Values[0] = True then
    cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := False
  else
    cxGrid1DBTableView1.ViewData.Records[Row].Values[0] := True;
  end;
end; 

cxGrid之checkbox小结

标签:ext   单选   object   tom   return   gray   form   mouse   sea   

原文地址:https://www.cnblogs.com/westsoft/p/8562816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!