提交 9a47164c 编写于 作者: C cz_012273

DBGrid标题栏点击排序加入升降序标志(上下箭头)(带参数过程实现)

上级 927b99bd
......@@ -66,7 +66,7 @@ end;
procedure TForm4.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
DM1.DBGridSort(DBGrid1,Column);
end;
procedure TForm4.FormShow(Sender: TObject);
......
......@@ -158,7 +158,7 @@ end;
procedure TForm3.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
DM1.DBGridSort(DBGrid1,Column);
end;
procedure TForm3.DBLookupComboBox1CloseUp(Sender: TObject);
......
......@@ -6,8 +6,8 @@ object DM1: TDM1
object FDConnection1: TFDConnection
Params.Strings = (
'Database=E:\WZGL\WZGLK.db'
'LockingMode=Normal'
'DriverID=SQLite')
Connected = True
Left = 40
Top = 24
end
......
......@@ -37,7 +37,7 @@ type
DataSource8: TDataSource;
SaveDialog1: TSaveDialog;
procedure DataModuleCreate(Sender: TObject);
procedure DBGridSort(Column: TColumn);
procedure DBGridSort(DBGrid:TDBGrid; Column: TColumn);
private
{ Private declarations }
......@@ -112,14 +112,15 @@ begin
end;
end;
procedure TDM1.DBGridSort(Column: TColumn); //DBgrid点击标题栏排序
procedure TDM1.DBGridSort(DBGrid:TDBGrid; Column: TColumn); //DBgrid点击标题栏排序
var
SqlStr,myFieldName,TempStr: string;
i,OrderPos: integer;
SqlStr,myFieldName,TempStr,TitleStr: string;
i,OrderPos,colnum: integer;
SavedParams: TParams;
const
colwidth:array[0..8] of integer = (4,20,6,10,10,6,16,4,14); //设定各列显示宽度
begin
if not (Column.Field.FieldKind in [fkData,fkLookup]) then exit;
//如果字段类型不属于物理字段或查询字段则退出
if Column.Field.FieldKind =fkData then
......@@ -130,9 +131,15 @@ begin
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
with TFDQuery(DBGrid.DataSource.DataSet) do
begin
close;
colnum:=column.index;
if (Pos('↑', column.Title.Caption) > 0)
or (Pos('↓', column.Title.Caption) > 0) then
column.Title.Caption :=
Copy(column.Title.Caption, 3,
Length(column.Title.Caption) - 2); //如果字段名中包含上下箭头,去掉字段名前两个字符
TitleStr := Column.Title.Caption; //取字段标题
SqlStr := UpperCase(Sql.Text); //SQL语句字符串大写
// if pos(myFieldName,SqlStr)=0 then exit; //如果SQL语句中不存在所选字段名,则退出
if ParamCount>0 then //如果运行过程时包含参数
......@@ -146,23 +153,35 @@ begin
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子句
begin
TempStr := ' Order By ' + myFieldName + ' Asc'; //生成按照所选字段升序排列的ORDER子句
TitleStr := '↑ ' + TitleStr;
end
else if pos('ASC',SqlStr)=0 then //如果ORDER子句中有所选字段但不包含升序标志
TempStr := ' Order By ' + myFieldName + ' Asc' //生成按所选字段升序排列的ORDER子句
begin
TempStr := ' Order By ' + myFieldName + ' Asc'; //生成按照所选字段升序排列的ORDER子句
TitleStr := '↑ ' + TitleStr;
end
else //如果ORDER子句中有所选字段且包含升序标志
TempStr := ' Order By ' + myFieldName + ' Desc'; //生成按所选字段降序排列的ORDER子句
begin
TempStr := ' Order By ' + myFieldName + ' Desc'; //生成按所选字段降序排列的ORDER子句
TitleStr := '↓ ' + TitleStr;
end;
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; //打开查询
if Not Active then Open ; //打开查询
DBGrid.Columns[colnum].Title.Caption := TitleStr;
for i:=0 to Fields.Count-1 do //循环读取常量数组,设定各列显示宽度
begin
......
......@@ -143,7 +143,7 @@ end;
procedure TForm2.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
DM1.DBGridSort(DBGrid1,Column);
end;
procedure TForm2.DBLookupComboBox1CloseUp(Sender: TObject);
......
......@@ -117,7 +117,7 @@ end;
procedure TForm6.DBGrid1TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
DM1.DBGridSort(DBGrid1,Column);
end;
procedure TForm6.DBGrid2DrawDataCell(Sender: TObject; const Rect: TRect;
......@@ -138,7 +138,7 @@ end;
procedure TForm6.DBGrid2TitleClick(Column: TColumn);
begin
DM1.DBGridSort(Column);
DM1.DBGridSort(DBGrid2,Column);
end;
end.
......@@ -88,9 +88,9 @@
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.9.2;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.9.3;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Release>9</VerInfo_Release>
<VerInfo_Build>2</VerInfo_Build>
<VerInfo_Build>3</VerInfo_Build>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
......
无法预览此类型文件
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册