提交 8c39182a 编写于 作者: C cz_012273

实现DBgrid点击标题栏排序!(仅库存提示部分,未完成)

上级 f4dc8ee0
......@@ -63,6 +63,7 @@ object Form6: TForm6
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
OnDrawColumnCell = DBGrid1DrawColumnCell
OnTitleClick = DBGrid1TitleClick
end
object DBGrid2: TDBGrid
Left = 31
......
......@@ -27,6 +27,7 @@ type
Field: TField; State: TGridDrawState);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
......@@ -113,6 +114,54 @@ begin
DBGrid1.DefaultDrawcolumnCell(Rect, DataCol, Column, State);
end;
procedure TForm6.DBGrid1TitleClick(Column: TColumn);
var
SqlStr,myFieldName,TempStr: string;
OrderPos: integer;
SavedParams: TParams;
begin
if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
//如果字段类型不属于物理字段或查询字段则退出
if Column.Field.FieldKind =fkData then
myFieldName := UpperCase(Column.Field.FieldName) //如为物理字段,字段名大写
else
myFieldName := UpperCase(Column.Field.KeyFields); //如为查询字段,主键名大写
while Pos(myFieldName,';')<>0 do //如果名称中包含分号
myFieldName := copy(myFieldName,1,Pos(myFieldName,';')-1)
+ ',' + copy(myFieldName,Pos(myFieldName,';')+1,100); //把分号变逗号
with dm1.FDQuery7 do
begin
SqlStr := UpperCase(Sql.Text);
// if pos(myFieldName,SqlStr)=0 then exit;
if ParamCount>0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('ORDER',SqlStr);
if (OrderPos=0) or
(pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then
TempStr := ' Order By ' + myFieldName + ' Asc'
else if pos('ASC',SqlStr)=0 then
TempStr := ' Order By ' + myFieldName + ' Asc'
else
TempStr := ' Order By ' + myFieldName + ' Desc';
if OrderPos<>0 then SqlStr := Copy(SqlStr,1,OrderPos-1);
SqlStr := SqlStr + TempStr;
Active := False;
Sql.Clear;
Sql.Text := SqlStr;
if ParamCount>0 then
begin
Params.Assign(SavedParams);
SavedParams.Free;
end;
Prepare;
Open;
end;
end;
procedure TForm6.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
Field: TField; State: TGridDrawState);
begin
......
无法预览此类型文件
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册