DBgrideh点击标题排序问题 ( 积分: 30 )

  • 主题发起人 主题发起人 shenli.chongqin
  • 开始时间 开始时间
S

shenli.chongqin

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我在双击点表格的第一行时他也排序,而不是我点标题他才排序。

我用网上找到代码var
sortstring:string; //排序列
begin
//进行排序
with Column do
begin
if FieldName = '' then
Exit;
case Title.SortMarker of
smNoneEh:
begin
Title.SortMarker := smDownEh;
sortstring := Column.FieldName + ' ASC';
end;
smDownEh: sortstring := Column.FieldName + ' ASC';
smUpEh: sortstring := Column.FieldName + ' DESC';
end;
//进行排序
try
ADOQuery2.Sort := sortstring //dataset为实际数据集变量名
except
end;
end;
end;}
 
要看你把代码写在哪里了
如果是DBGrid的话,有OnTitleClick
DBGrideh就没用过了
 
我是写在DBGridEh1TitleClick事件中的,我的DBGridEh1DblClick事件是打开另一个FORM
列出该条记录的明细,双击DBGRIDEH中的其他列都正常,但双击DBGRIDEH的第一列他就会去排序,往往双击第一列进去的不是我想看到的记录,而是按该列排序后的第一列的记录。
为什么?谢谢赐教!
 
跟踪一下,看看DBGridEh1DblClick时有没有调用DBGridEh1TitleClick
 
我的DBGridEh1DblClick很简单,而且只是点第一列才会出现上述情况,点其他列都很正常。
procedure TForm2.DBGridEh1DblClick(Sender: TObject);
begin
state_1:=0;
if not Assigned(form3) then
form3:=Tform3.Create(self);
else
form3.Show
end;
 
点第一列才会出现上述情况?点到标题栏了
怎么没有判断双击的位置呢
 
我的两个FROM 用的同一个数据集。
 
改变一下Form3的位置,Form3上也有排序过程吧
当Form3 Show的时候,鼠标刚好在Form3的DBGrid的Title上释放,触发了排序,
 
请教下要怎么改变Form3的位置?改变位置在试试。
我的Form3 没有用到DBGridEH都是些DBEDIT等,而且我的ADOQUERY 没有用到ORDER BY .我觉得如果就算是用了排序他应该是所以列都会出现上述问题,但他只是第一列才会这样。
 
procedure DsSort(SortColumn: TColumnEh);
var
OldIndex:string;
begin
if (SortColumn.Grid.DataSource=nil) or (SortColumn.Grid.DataSource.DataSet=nil) or (not SortColumn.Grid.DataSource.DataSet.Active) then Exit;
OldIndex:=TClientDataSet(SortColumn.Field.DataSet).IndexName;
if OldIndex<>'' then
begin
TClientDataSet(SortColumn.Field.DataSet).IndexName:='';
TClientDataSet(SortColumn.Field.DataSet).DeleteIndex(OldIndex);
end;
case SortColumn.Title.SortMarker of
smNoneEh,smUpEh :TClientDataSet(SortColumn.Field.DataSet).AddIndex('px',SortColumn.Field.FieldName,[ixDescending]);
smDownEh:TClientDataSet(SortColumn.Field.DataSet).AddIndex('px',SortColumn.Field.FieldName,[ixPrimary]);
end;
TClientDataSet(SortColumn.Field.DataSet).IndexName:='px';
end;

将Tclientdatgaset 改为你自己的adoquery
在DBGridEh1TitleBtnClick,
dssort(column);

用这个方法试试
 
:TADOQuery(SortColumn.Field.DataSet).[red]AddIndex[/red]('px',SortColumn.Field.FieldName,[ixDescending]);
TADOQuery(SortColumn.Field.DataSet).[red][brown]DeleteIndex[/brown][/red](OldIndex)
不能用。
 
procedure SetEhAutoSort(DBGridEH: TDBGridEH);
var
i: integer;
begin
try
//显示箭头图标
if not Assigned(DBGridEH.DataSource) then Exit;
if not Assigned(DBGridEH.DataSource.DataSet) then Exit;
DBGridEH.OptionsEh := DBGridEH.OptionsEh + [dghAutoSortMarking];
//设置排序为True, 对于不用SQL得到数据集要用此方法
DBGridEh.SortLocal := True;
//设置TitleButton
DBGridEH.DataSource.Dataset.DisableControls;
for i := 0 to DBGridEH.Columns.Count - 1 do
begin
DBGridEH.Columns.Title.TitleButton := True;
DBGridEH.Columns.Title.Alignment := taCenter;
end;
DBGridEH.DataSource.Dataset.EnableControls;
except
on E: Exception do
//SaveLog(E.Message);
end;
end;
引用 EhLibADO 单元.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部