有谁知道在dbgrideh中直接点击title就可按点击的那个字段排序的方法?不盛感激!(20分)

  • 主题发起人 程式猎人
  • 开始时间

程式猎人

Unregistered / Unconfirmed
GUEST, unregistred user!
根據不同的 TITLE 生成不同的 SQL ,然後用這個SQL 做 DataSouce
 
建议使用dxDBGrid控件,有这个支持
 
procedure TForm1.DBGridehTitleClick(Column: TColumn);
var
SortStr:string;
begin
SortStr:=Column.Field.FieldName+' ASC';
ADOTable1.Sort :=SortStr;
end;
 
to sherman:
哪里可以下载到你所说的控件?
to mlzhou:
我是在b/s结构里,用的是ClientDataSet,它没有sort属性,这样有什么办法吗?
 
自己 编写一段代码啊
根据所选中的字段名进行排序啊
 
同意mlzhou,DBgirdEh已经很好了。加上ADO的内存排序,根本不需要再什么SQL。代码不
超过15行。
 
排序StringGrid
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const
//指定分隔字符
TheSeparator = '@';
var
CountItem, I, J, K, ThePosition: integer;
MyList: TStringList;
MyString, TempString: string;
begin
//取StringGrid行数
CountItem := GenStrGrid.RowCount;
//创建 List
MyList := TStringList.Create;
MyList.Sorted := False;
try
begin
for I := 1 to (CountItem - 1) do
MyList.Add(GenStrGrid.Rows.Strings[ThatCol] + TheSeparator +
GenStrGrid.Rows.Text);
//排序 List
Mylist.Sort;
for K := 1 to Mylist.Count do
begin
//获取每行字符串
MyString := MyList.Strings[(K - 1)];
//查找分隔字符在字符串中位置
ThePosition := Pos(TheSeparator, MyString);
TempString := '';
TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
MyList.Strings[(K - 1)] := '';
MyList.Strings[(K - 1)] := TempString;
end;
//填充 StringGrid
for J := 1 to (CountItem - 1) do
GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
end;
finally
//释放 List
MyList.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SortStringGrid(StringGrid1, 1);
end;
 
DEMO上就有例子
 
procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
//点击GridEh标题排序
if (Column.Title.SortMarker = smNoneEh) or (Column.Title.SortMarker = smDownEh) then
begin
ADOQuery1.SORT := COLUMN.FIELDNAME;
Column.Title.SortMarker := smUpEh
end
else
begin
ADOQuery1.SORT := COLUMN.FIELDNAME + ' DESC';
Column.Title.SortMarker := smDownEh
end;
end;
 
顶部