怎样在DBGrid中点击某一列标题时表中的值就按这一列排序?
解决方案 »
- 动态调用函数一个
- IE显示自定义格式图片的插件
- 简单的CommandText查询问题 高手帮忙下
- 关于GPRS的问题,从来没做过,特来请教!
- 我的这个想法如何实现?关于DELPHI+ASP的
- 急!!!!下班前结帖。关于数据库图像读出来后,怎么我的报表中QRDBImage怎么死活不显示的问题!
- 如何在数据库中覆盖原来的记录!急!!
- 找工作的问题,顺便散分
- 急,关于登陆时的问题(用的是adoconnect),请各位帮忙!!(我是菜鸟。)
- 红着脸问一个问题,已知弧的两个端点的坐标和弧的弧度,如何求出圆心坐标。
- 为什么Image控件不能用Picture.LoadFromFile('d:/xxx.jpg')来装载jpg图片???
- 在线等待,关于quickrep的问题!
begin
...
你的排序代码
...
end;
procedure TFQueryForm.DBGrid1TitleClick(Column: TColumn);
var
sortstr: string;
begin
if not (DataSource.DataSet.Eof and DataSource.DataSet.Bof) then
begin
SortStr:='';
if pos(' ASC', (DataSource.DataSet as TADODataSet).Sort) > 0 then
SortStr:=Column.Field.FieldName+' DESC'
else
SortStr:=Column.Field.FieldName+' ASC'; with DataSource.DataSet as TADODataSet do
Sort:= SortStr;
end;
end;
var
i:integer
begin
for i:=0 to DBGrid1.datasource.dataset.IndexDefs.count-1 do
if DBGrid1.datasource.dataset.IndexDefs.items[i].fields=column.Title.Caption then
DBGrid1.datasource.dataset.indexname:=DBGrid1.datasource.dataset.IndexDefs.items[i].name;
end;
begin
query1.close;
query1.clear;
query1.add(....Order by DBGrid1.Columns[].FieldName);
query1.open;
end;
declare @sName varchar(20)
Select @sName = :sName
exec('select * From temp1 '+@sName)
把控件的Parameters里该参数设为ftstring
Delphi里写
procedure TForm1.FormShow(Sender: TObject);
begin
with Adoquery do
begin
Close;
Parameters.ParamValues['sName'] := 'order by fNo';
Open;
end;
end;procedure TForm1.DBGridTitleClick(Column: TColumn);
var
ss : string;
begin
ss := 'order by '+DBGrid.SelectedField.FieldName;
with qryMain do
begin
Close;
Parameters.ParamValues['sName'] := ss;
Open;
end;
end;搞顶,
不过此招有缺陷:
需要先把光标移到要排序的字段
procedure TFormDDM.DBGridObjectsTitleClick(Column: TColumn);
var
iFieldCount : integer;
begin
if ADODataSetObjects.Active then
begin
if ADODataSetObjects.RecordCount = 0 then exit;
end
else
exit; // 遍历表字段, 初始化Title标题
for iFieldCount := 0 to ADODataSetObjects.FieldCount - 1 do
begin
if (Copy(DBGridOBjects.Columns[iFieldCount].Title.Caption,Length(DBGridOBjects.Columns[iFieldCount].Title.Caption)-1,2) = '▼') or (Copy(DBGridOBjects.Columns[iFieldCount].Title.Caption,Length(DBGridOBjects.Columns[iFieldCount].Title.Caption)-1,2) = '▲') then
begin
DBGridOBjects.Columns[iFieldCount].Title.Caption := Copy(DBGridOBjects.Columns[iFieldCount].Title.Caption,1,Length(DBGridOBjects.Columns[iFieldCount].Title.Caption)-3);
break;
end;
end;if Pos('ASC', ADODataSetOBjects.Sort) > 0 then
begin
ADODataSetObjects.Sort := Column.FieldName + ' DESC';
Column.Title.Caption := Column.Title.Caption + ' ▼';
end
else
begin
ADODataSetObjects.Sort := Column.FieldName + ' ASC';
Column.Title.Caption := Column.Title.Caption + ' ▲';
end;
end;
你会看到很多的例子,应该有一个适合你!
我就这样找的
:D
procedure Tform1.DBGrid2TitleClick(Column: TColumn);
begin
if tosort then
ADOQuery1.Sort := Column.FieldName + ' ASC'
else
ADOQuery1.Sort := Column.FieldName + ' DESC';
tosort := not tosort;
end;
//tosort为全局变量