请问DXDBGRID的用法?(100分)

  • 主题发起人 主题发起人 joh
  • 开始时间 开始时间
J

joh

Unregistered / Unconfirmed
GUEST, unregistred user!
DXDBGRID有没有属性(如SORT等)可以实现:点击DXDBGRID的
某个字段标题,就按这个标题排序?如果有,怎么用?
 
得自己在onColumnClick里加上SQL语句进行升序和降序的排序.
procedure TMainForm.dxDBGrid1ColumnClick(Sender: TObject;
Column: TdxDBTreeListColumn);

function GetFieldName(AColumn : TdxDBTreeListColumn) : String;
begin
with TdxDBGrid(Sender).DataSource.DataSet.FieldByName(AColumn.FieldName) do
begin
Result := FieldName;
if FieldKind = fkLookup then Result := KeyFields;
end;
end;

var
ID, i: Integer;
SQLOrderSt: String;
OldSorted: TdxTreeListColumnSort;
begin
with TdxDBGrid(Sender) do
begin
OldSorted := Column.Sorted;
if (GetAsyncKeyState(VK_SHIFT) = 0) then
TdxDBGrid(Sender).ClearColumnsSorted;

if OldSorted = csUp then
Column.Sorted := csDown
else
Column.Sorted := csUp;

with TQuery(DataSource.DataSet) do
begin
ID := FieldByName('ID').AsInteger;
DisableControls;
try
Close;
SQLOrderSt := '';
for i := 0 to SortedColumnCount - 1 do
begin
if SQLOrderSt <> '' then
SQLOrderSt := SQLOrderSt + ', ';
SQLOrderSt := SQLOrderSt + GetFieldName(SortedColumns);
if SortedColumns.Sorted = csDown then
SQLOrderSt := SQLOrderSt + ' DESC';
end;
if SQLOrderSt <> '' then
SQLOrderSt := 'ORDER BY ' + SQLOrderSt;
SQL.Strings[SQL.Count - 1] := SQLOrderSt;
Open;
Locate('ID', ID, []);
finally
EnableControls;
end;
end;
end;
end;
 
呵呵。 楼上的。 你这样对待DXGRID 啊。 太痛苦了。

DXGRID 设计排序和统计的关键前提是先指定 DXGRID 的KEY FIELD字段
然后设置它的 edgoAnsi Sort属性 为TRUE 就可以了.随便点任意字段都可以排序
如果还需要显示合计的话。 需要将edgoLoadAllRecords 设置为 True.
不过需要注意 如果你做的是C/S编程,这意味着要从服务器上把所有符合条件的记录
全部取回本地
 
to joh:
我也想試試這個控件,能否發給我一份.(深度歷險這些天關了.)


to 王寒松:

sortDbgrid的用法如何?<講是可以排序,但不知怎么做?>
 
I will send it to you
 
接受答案了.
 
我的例子是动态的排序,可以点击任何字段,不用事先设计好字段
 
后退
顶部