DBGridEH刷新后如何能够保持原来的Column不变!大家帮忙看看啊!谢谢!(100分)

  • 主题发起人 主题发起人 SanDao
  • 开始时间 开始时间
S

SanDao

Unregistered / Unconfirmed
GUEST, unregistred user!
我在用dbGridEh时要用到AutoSort排序,是在Grid的TitleBtnClick事件中写入
procedure TForm1.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
Column: TColumnEh);
var
SortStr: string;
begin
if Column.Title.SortMarker = smDownEh then
SortStr := Column.FieldName + ' ASC'
else
SortStr := Column.FieldName + ' DESC';
TADODataSet(TDbGridEh(Sender).DataSource.DataSet).Sort := SortStr;
end;
通过数据集的刷新来时行排序!(这是成功的)!
但是如果在我的dbgrideh中字段很多,有的字段要向右拉滚动条才能看到!
对于这些字段,我一点dbgrideh的字段标题进行排序后,由于数据集的刷新,
这些字段又不可见了!(又要向右拉滚动条了)
请问大家有没有办法让column不动呀!
(也不知道我把问题说清楚了没,大家帮忙看看啊!谢谢)
 
方法一:在Dataset的FieldsEditor中将每个字段的Size属性在设计期间定好(当然根
据数据库结构了)。

方法二:在设计期间先将DBGrid的Column定好,再确定其每一字段的宽度。建议用方案一。
 
>>David1289
你的意思是让我把所有字段在一屏上正好显示完,不用再向右拉动滚动条,是吗?
可是我有十几个字段的呀,一屏里再精打细算也放不下呀!还有没有别的方法呀?
 
关注!我也遇到过!
 
关注!我也遇到过![?]
 
你是想把常用的字段放在前面?
如果是这样的话,只要在TitleBtnClick事件中(当然还有其他的事件)
重新给dbgrid.column.fieldname赋值就行了。
 
用INI文件记录COLUMN。WIDTH就可以了
 
>>gks
我并不是要把常用的放在前面!这是一个统计表(好几个SQL语句写完,并导入到这
个新表中,这个新表的每一个字段都要排序)

>>weiweiHU
不大明白,具体如何做,如果可以保存到ini,那么用变量也应该可以实现(现在就是不
知道DBGridEh中到底有没有这种属性可以让我保存,在排完序后再把它赋回去,使得
Column的列保持原样)

SanDao谢谢两位的建议!
 
DBGrid->SelectIndex
 
DBGrid的SelectedIndex确实可以将当前的列值保存下来!
并当我刷新完成后,将此值赋回,基本达到了要求,但有一点缺陷(将此值赋为时,
它将此列显示在紧贴dbGrid的最右端,这样虽然可以看到,不用再向右拉滚动条,但还
是有一定的位移[在刷新前该列并不在dbGrid的最右端])
谢谢cool868的提醒!

由于cool868的提醒,我在DbGridEh中也同样试验,发现SelectedIndex的值总是为0,
最后发现是dgRowSelect为True的原因!将此属性改为False后,SelectedIndex的值正确。
于是在刷新前保存该值,刷新后再赋回!
procedure TForm1.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer;
Column: TColumnEh);
var
SortStr: string;
Current_Column : Integer;
begin
if Column.Title.SortMarker = smDownEh then
SortStr := Column.FieldName + ' ASC'
else
SortStr := Column.FieldName + ' DESC';
Current_Column := TDbGridEh(Sender).SelectIndex;//新添1
TADODataSet(TDbGridEh(Sender).DataSource.DataSet).Sort := SortStr;
TDbGridEh(Sender).SelectIndex := Current_Column;//新添2
end;
哈哈,居然效果好的很!一点位移也不存在,比DBGrid的效果要好的多!
不过我很快发现,新添1和新添2两句去掉后,效果居然一样!
(其实只要dgRowSelect为False就解决了!!!) :》DbGridEh真是好东东 :》

谢谢大家的关注,发完此贴后,很快就会结贴!
 
Columns[n].width=integer;
 
>>自我教育
此题的本意并非想改变Column的宽度!谢谢!
cool868 55(给了自我教育5分,呵呵,别见怪!)
David1289 10
gks 10
i love this delphi 5
Sdelphi_fu 5
weiweiHU 10
自我教育 5
SanDao再次谢各位!
 
>>自我教育
抱歉,抱歉!写倒写了,上面忘改了,那5分还是给了Cool868! :(
下次一定给! :》
 
后退
顶部