当前位置:首页 > cxGrid的使用方法
cxCustomData;
procedure TYour_Form.AViewDataControllerFilterChanged(Sender: TObject); var
Filter: TcxDataFilterCriteria;
begin
with Sender as TcxDataFilterCriteria do if IsEmpty then
DataController.FocusedRowIndex := 0; end;
=============================================================================
排序后移到第一行
可以设置DataController.Options.FocusTopRowAfterSorting := True,也可以使用如下的代码:
uses
cxCustomData;
procedure TYour_Form.Your_ViewDataControllerSortingChanged(Sender: TObject); begin
TcxCustomDataController(Sender).FocusedRowIndex := 0; end;
==============================================================================
判断当前行是否第一行或最后一行
可以使用DataController的IsBOF, IsEOF方法,或者:
==============================================================================
根据指定值查找记录
DataController提供了好几个方法来得到指定值对应的RecordIndex 对于Bound View可以使用FindRecordIndexByKeyValue方法
===============================================================================
编辑和显示Blob字段
该字段的Properties设置为BlobEdit,并将BlobPaintStyle 属性设为 bpsText
===============================================================================
得到可见行数
===============================================================================
保存后的行设置为当前行
const
CM_SETFOCUSEDRECORD = WM_USER + 1002;
type
TForm1 = class(TForm)
cxGrid1DBTableView1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; cxGrid1: TcxGrid;
dxMemData1: TdxMemData;
dxMemData1Field1: TStringField; dxMemData1Field2: TIntegerField; DataSource1: TDataSource;
cxGrid1DBTableView1RecId: TcxGridDBColumn; cxGrid1DBTableView1Field1: TcxGridDBColumn; cxGrid1DBTableView1Field2: TcxGridDBColumn; Timer1: TTimer;
CheckBox1: TCheckBox;
procedure Timer1Timer(Sender: TObject);
procedure dxMemData1AfterPost(DataSet: TDataSet); procedure CheckBox1Click(Sender: TObject);
private
procedure CMSetFocusedRecord(var Msg: TMessage); message CM_SETFOCUSEDRECORD;
public
{ Public declarations }
end;
var
Form1: TForm1; FocusedIdx: Integer;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject);
begin
dxMemData1.AppendRecord(['', IntToStr(Random(1000)), Random(1000)]); end;
procedure TForm1.dxMemData1AfterPost(DataSet: TDataSet); begin
PostMessage(Handle, CM_SETFOCUSEDRECORD, Integer(cxGrid1DBTableView1), MakeLParam(cxGrid1DBTableView1.Controller.FocusedRowIndex, cxGrid1DBTableView1.Controller.TopRowIndex)); end;
procedure TForm1.CMSetFocusedRecord(var Msg: TMessage); begin
TcxGridDBTableView(msg.WParam).Controller.FocusedRowIndex := Msg.LParamLo; TcxGridDBTableView(msg.WParam).Controller.TopRowIndex := Msg.LParamHi; end;
procedure TForm1.CheckBox1Click(Sender: TObject); begin
Timer1.Enabled := TCheckBox(Sender).Checked; end;
end.
=================================================================================
删除记录并获得焦点
procedure TForm1.BtnDeleteClick(Sender: TObject); var
FocusedRow, TopRow: Integer; View: TcxGridTableView;
DataController: TcxGridDataController;
begin
View := cxGrid1.FocusedView as TcxGridTableView; DataController := View.DataController;
// Remember the top row (the vertical scrollbar position) TopRow := View.Controller.TopRowIndex;
// Remember the focused row(!) index
FocusedRow := DataController.FocusedRowIndex;
DataController.DeleteFocused;
// After deletion the same row must be focused,
// although it will correspond to a different data record DataController.FocusedRowIndex := FocusedRow; // Restore the top row
View.Controller.TopRowIndex := TopRow; end;
//====================================================================================
报表汇总的设置
数据库中的财务表为:
ID 收支类型 金额 其它属性
其中收支类型只有两种值:0 表示收入,1 表示支出 ;金额都是正数。
设置cxGrid的Footer 可以使得在显示时,列表的下方出现汇总行:“金额”的和 同样设置Default For Groups可以使得在用户拖动表头属性实现分组时,显示组内的汇总行:“金额”的和。
上面说的,用过cxGrid应该都会,下面就有这幺一个问题
如果我想使汇总行的值变为如下的值应该怎样实现:
收支类型为0的金额的和 - 收支类型为1的金额的和
实现Footer的功能好办,因为它的值不会变,自己用循环写一个就完了,但是Default For Groups的功能就不好说了,因为它的值是根据用户拖动的属性计算的,而且还有可能是多层分组,想不出来了,所有到这来问 是不是要设置什幺属性?或者cxGrid根本就没这个功能,那该用什幺方法解决?希望哪位帮我解决,谢谢了先!
给你一个例子,可能对你有帮助,
with tvOrders.DataController.Summary do
begin
BeginUpdate; try
共分享92篇相关文档