提交 e08f15aa 编写于 作者: C cz_012273

Dbgrid点击排序功能加入公用模块(入库、出库、查询、提示均可使用,同时自动调整前五列列宽)

上级 8c39182a
......@@ -222,5 +222,6 @@ object Form4: TForm4
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
OnTitleClick = DBGrid1TitleClick
end
end
......@@ -32,6 +32,7 @@ type
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
......@@ -63,6 +64,11 @@ begin
close;
end;
procedure TForm4.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
end;
procedure TForm4.FormShow(Sender: TObject);
begin
dm1.FDConnection1.Connected := True;
......
......@@ -119,6 +119,7 @@ object Form3: TForm3
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
OnTitleClick = DBGrid1TitleClick
end
object DBLookupComboBox1: TDBLookupComboBox
Left = 151
......
......@@ -39,6 +39,7 @@ type
procedure DBLookupComboBox2CloseUp(Sender: TObject);
procedure DBLookupComboBox3CloseUp(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
......@@ -155,6 +156,11 @@ begin
end;
end;
procedure TForm3.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
end;
procedure TForm3.DBLookupComboBox1CloseUp(Sender: TObject);
begin
DM1.FDQuery3.FieldByName('品名').value := DBLookupComboBox1.text;
......
......@@ -37,6 +37,7 @@ type
DataSource8: TDataSource;
SaveDialog1: TSaveDialog;
procedure DataModuleCreate(Sender: TObject);
procedure DBGridSort(Column: TColumn);
private
{ Private declarations }
......@@ -111,6 +112,60 @@ begin
end;
end;
procedure TDM1.DBGridSort(Column: TColumn); //DBgrid点击标题栏排序
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 TFDQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
close;
SqlStr := UpperCase(Sql.Text); //SQL语句字符串大写
// if pos(myFieldName,SqlStr)=0 then exit; //如果SQL语句中不存在所选字段名,则退出
if ParamCount>0 then //如果运行过程时包含参数
begin
SavedParams := TParams.Create; //创建保存参数变量
SavedParams.Assign(Params); //连接参数
end;
OrderPos := pos('ORDER',SqlStr); //获取'ORDER'串在SQL语句中的起始位置
if (OrderPos=0) or
(pos(myFieldName,copy(SqlStr,OrderPos,100))=0) then //如不存在ORDER或ORDER子句中不包含所选字段
TempStr := ' Order By ' + myFieldName + ' Asc' //生成按照所选字段升序排列的ORDER子句
else if pos('ASC',SqlStr)=0 then //如果ORDER子句中有所选字段但不包含升序标志
TempStr := ' Order By ' + myFieldName + ' Asc' //生成按所选字段升序排列的ORDER子句
else //如果ORDER子句中有所选字段且包含升序标志
TempStr := ' Order By ' + myFieldName + ' Desc'; //生成按所选字段降序排列的ORDER子句
if OrderPos<>0 then SqlStr := Copy(SqlStr,1,OrderPos-1); //如果存在ORDER子句,提取ORDER子句之前的SQL语句内容
SqlStr := SqlStr + TempStr; //将其与新生成的ORDER子句连接
Active := False; //锁定QUERY状态
Sql.Clear; //清除SQL内容
Sql.Text := SqlStr; //更新SQL内容
if ParamCount>0 then //如果运行过程时包含参数
begin
Params.Assign(SavedParams); //提取保存的参数变量
SavedParams.Free; //释放参数变量
end;
Prepare; //将带参数的SQL语句传给数据库引擎
Open; //打开查询
Fields[0].DisplayWidth := 4;
Fields[1].DisplayWidth := 20;
Fields[2].DisplayWidth := 6;
Fields[3].DisplayWidth := 10;
end;
end;
function ExportDBGrid(Args: array of const; SheetName: string): boolean;
// 循环读取记录方式导出EXCEL
......
......@@ -112,6 +112,7 @@ object Form2: TForm2
TitleFont.Height = -11
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
OnTitleClick = DBGrid1TitleClick
end
object DBNavigator1: TDBNavigator
Left = 31
......
......@@ -39,6 +39,7 @@ type
procedure DBLookupComboBox1CloseUp(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
private
{ Private declarations }
......@@ -140,6 +141,11 @@ begin
end;
end;
procedure TForm2.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
end;
procedure TForm2.DBLookupComboBox1CloseUp(Sender: TObject);
begin
DM1.FDQuery1.FieldByName('品名').value := DBLookupComboBox1.text;
......
......@@ -79,6 +79,7 @@ object Form6: TForm6
TitleFont.Name = 'Tahoma'
TitleFont.Style = []
OnDrawDataCell = DBGrid2DrawDataCell
OnTitleClick = DBGrid2TitleClick
end
object Button3: TButton
Left = 180
......
......@@ -28,6 +28,7 @@ type
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure DBGrid1TitleClick(Column: TColumn);
procedure DBGrid2TitleClick(Column: TColumn);
private
{ Private declarations }
......@@ -115,51 +116,8 @@ begin
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;
DM1.DBGridSort(Column);
end;
procedure TForm6.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
......@@ -178,4 +136,9 @@ begin
DBGrid2.DefaultDrawDataCell(Rect, Field, State);
end;
procedure TForm6.DBGrid2TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
end;
end.
无法预览此类型文件
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册