用Express 的dxdbgrid (20分)

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

jxpengfei

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在DXDBGRID(DEV EXPRESS中的一个控件)中在列标题上出现排序的小箭头,
1. 设置OptionsBehavior.egoLoadAllRecords 和 OptionsDB.egoAutoSort属性为True
就可以,不过我试了一下,要指定KeyField属性的值才有效。
2. 在OnColumnClick事件中加入你的排序方法,以下是它的Demo中的代码:
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;
由此我们可看到它是用动态SQL语句重新ORDER BY记录了


上面虽然可以,但是我在存储过程中使用就不行,我试了一下,要指定KeyField属性的值才有效,但在存储过程中它不就不行了,
例了在下面
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, dxCntner, dxTL, dxDBCtrl, dxDBGrid, Db, ExtCtrls,
DBCtrls, ADODB, DBClient, MConnect, SConnect, Grids, DBGrids;
type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
DBNavigator1: TDBNavigator;
DataSource1: TDataSource;
dxDBGrid1: TdxDBGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
dxDBGrid2: TdxDBGrid;
DataSource2: TDataSource;
ADOConnection2: TADOConnection;
ADOQuery2: TADOQuery;
DBGrid1: TDBGrid;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
// procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
// procedure CreateDBGridColuns(Grd:TdxDBGrid);
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
CSql:String;
begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.add('select * from ygtxl');
ADOQuery1.Open ;
dxDBGrid1.CreateDefaultColumns(DataSource1.DataSet,dxDBGrid1);
dxDBGrid1.KeyField:='yggh';
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
CSql:String;
begin
CSql:= 'GetYgtxlInfo @Bm='''','+'@address ='''','+'@ygxm='''','+'@yggh='''','+'@bgdh='''','+'@Zzdh ='''','+'@ydtx ='''' ,'+'@yggw=''''';
ADOQuery2.Close;
ADOQuery2.SQL.Clear ;
ADOQuery2.SQL.Add(CSql);
ADOQuery2.Open ;
dxDBGrid2.CreateDefaultColumns(DataSource2.DataSet,dxDBGrid2);
dxDBGrid2.KeyField:='yggh';
end;

end.



请大。。。。。速。。。。。。先谢谢
 
接受答案了.
 
后退
顶部