十萬火急,求DBGrideh 點擊標題排序的問題(50分)

  • 主题发起人 主题发起人 zpselect
  • 开始时间 开始时间
Z

zpselect

Unregistered / Unconfirmed
GUEST, unregistred user!
點擊DBGrideh標題時,排序是沒有區分大小寫的,但客戶要求區分大小寫來進行排序顯示:如
1111aaa
A1111
a1111
A3333
a3333
那麼升序之後應為:
1111aaa
A1111
A3333
a1111
a3333
降序為:
a1111
a3333
A3333
A1111
1111aaa
總之,不管是升序還是降序,大寫的值與小寫的值各自組在一塊
請問有辦法達到這樣的效果嗎?
 
应该没办法吧!字符串应该就是按ASCII码排序的
只有把大写字母都换为小写字母再排序了!
帮你顶顶
关注!
 
这个问题以前碰到过,最后没办法,只能说服客户统一成大写或者小写,并且在程序里限制了一下输入的大小写状态。
 
真是暈啊,客戶就是要這樣的功能,真他媽的。
 
客户这种要求用dbgrideh可能实现不了,不知道其他的这类组件能不能实现
 
试下按ASCII码值排序
看楼主的大小顺序是按ASCII码来的
 
根据那些编码,再生成一个字段,按那个字段排序就ok
 
这个与前台程序无关,主要是数据库要以二进制字符集进行存储
 
點擊DBGrideh標題進行排序實際來講是對數據集中的數據進行排序即:AdoQuery.sort:='id asc'因為sort是一個string類型的,所以在此生成另外一個字段的話,其根本就不視別,當其為一個字符串看待,所以會報錯,如:
ADOQuery.sort:='convert(binary,id) as a asc '
 
ADOQuery1.Close;
ADOQuery1.SQL.Text:='select convert(binary,cName) as a,*From bsItem';
ADOQuery1.Open;
ADOQuery1.Sort:='a';
不知道这样是不是你需要的,其中cName是排序的字段
 
謝謝樓上朋友的回復,因為因為查詢窗體上百個,所以一一修改工作量會很大,我想在基類裡面修改。
 
下面给你一些资料,点进去看看.里有的:
DBGridEh 用法
http://www.delphibbs.com/keylife/iblog_show.asp?xid=26770
 
謝謝,看看先!
 
这是控件本身的问题
要么你继承这个DBGrideh 重写他的排序方法
要么换一个控件cxGrid什么的,问题即可解决
 
通过dbgrid取到当前列的fieldname
然后可以去adoquery.recordset里设置了
 
关--注。
 
楼主
偶终于研究出来了
给分啊,哈哈
ORDER BY ASCII(SUBSTRING(name, 1, 1)) DESC/..
 
case dbg.Columns.Title.SortMarker of
smUpEh: begin
if sortstring<>'' then
sortstring:=sortstring+',';
sortstring:=sortstring+dbg.Columns.FieldName+' ASC';
end;

smDownEh: begin
if sortstring<>'' then
sortstring:=sortstring+',';
sortstring:=sortstring+dbg.Columns.FieldName+' DESC';
end;
 
后退
顶部