兄弟们,最后6分了,恐怕也是最后一个问题了!sqlserver库中类型为字符串的字段在我用adoQuery查询出来后显示在dbgrid中时,为什么这一列宽度那么

  • 主题发起人 主题发起人 pizixiao
  • 开始时间 开始时间
P

pizixiao

Unregistered / Unconfirmed
GUEST, unregistred user!
兄弟们,最后6分了,恐怕也是最后一个问题了!sqlserver库中类型为字符串的字段在我用adoQuery查询出来后显示在dbgrid中时,为什么这一列宽度那么宽,将此宽度设小后,结果却看不内容了,我列的对其方式显示的是居中。看不见内容了!(6分)<br />我处理的代码是这样的:
select column1,column2 from table1;column1和column2都是varchar型的字段,长度都为300,查询出来显示在dbgrid中特别宽,宽度设小后又看不见内容了。我想了个方法,代码如下:
select rtrim(column1) as column1,rtrim(column2) as column2 from table1
但是我程序后面的功能又不要求我这样做,因为我要对dbgrid中的数据进行添加、删除和修改,肯定不能使用rtrim函数,所以现在只能对查询出来后的记录集进行处理,怎么做呢?
各位兄弟,发表一下一建啦!
 
没有人会吗?[^]
 
怎么会呢?varchar类型的字段是不会存那么多空格进去的!
 
在Field.OnGetText事件中处理
 
动态改变列的宽度
dbgrid1.columns[x].width:=。。。。。。。
我约摸着写的,语法不一定对。
 
兄弟,varchar就不会吗?那你说char会吗?
 
pihome:
我的列不是固定的,怎么触发Field.OnGetText这个事件呢?我想不出办法!并且我在dbgrid中动态显示查询的结果,并不是固定的一个查询,而是多个查询,给出你的具体做法,好吗?期待!
 
char当然会了,比如说,你定义一个字段为Varhcar(10),则如果赋值为'123'时,数据库里存的就是'123',但你如果定义它为Char(10),则它会先用空格填充再存进去即'123 ',除非你定义了varchar,在输入时又真的输入了很多空格,它才会存进去空格,但这样的话空格本身就是字段的内容了。
 
wfzha:
我就是那么做的,不行的,我的代码如下:
with dbgrid1 do
begin
for i:=0 to columns.Count-1 do
begin
columns.Alignment:=taCenter;
columns.Title.Alignment:=taCenter;
columns.Width:=90;
end;
end;
 
lichaogang:
你可以试验一下,告诉我实验的结果,好吗?期盼!
 
明天,OK?我家里没有安装Delphi,不方便,明天到公司吧!
 
哎,相应者寥寥无几!郁闷!
 
lichaogang:
期待!
 
varchar是不会出现这种情况的,
是不是使用了char类型的录入了数据后才改成的varchar的原因.
 
大家一起来帮忙了!谢谢!
 
zhanggeye:
肯定吗?我试试!
 
columns.Alignment:=taCenter;
为什么要这一句?左对齐不是很好吗?
 
wfzha:
左对齐也不行呀。我试了
 
左对齐好像可以,但还有没有更好的办法呢?
 
procedure TForm1.FormCreate(Sender: TObject);
var i,ti,ci:integer; //分别为列号,标题宽度,列字串宽度
begin
for i:=0 to dbgrid1.Columns.Count - 1 do
begin
dbgrid1.Columns.Alignment:=tacenter;
dbgrid1.Columns.Title.Alignment := tacenter;

ti:= length(dbgrid1.Columns.Title.caption )*8; //得到列标题的宽度,这是个大约数,具体你可以再调
// ci:= length(dbgrid1.DataSource.DataSet.Fields.DisplayText)*8; //得到字段记录显示字符宽度,也是大约数啊
ci:= length(dbgrid1.DataSource.DataSet.Fields.DisplayText)*14; //我又看了一下,如果有人搞全角的符号和全角的字母的话就得这个宽度才正好
if ci> ti then //如果记录显示的宽度大于了列宽,用字串宽度为准,否则以列标题为准就行了
dbgrid1.Columns.Width := ci
else
dbgrid1.Columns.Width := ti;
end ;
end;
 

Similar threads

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