如何控制DataGrid的列宽

kongxiang112233 2010-01-06 04:28:19
为什么我不管我怎么在自定义或者属性里调整DataGrid的列宽,等我运行的时候,一点确定,数据搜出来以后,它的列宽又自动变回最开始的样子了,第一列最窄,中间两列等宽,最后一列最宽,不知道为什么啊?
还有就是,有时我在DataGrid的属性页里改了一些属性后,比如布局里面的宽度后,我运行后,数据仍然可以被搜出来,但显示不出来了,但我要是改一些别的属性,比如“通用”里面的“允许更新”,“有效”;“拆分”里面的“选取框样式”时,运行后数据仍能正常显示,这又是为什么啊?弄的我很郁闷啊
...全文
500 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwmys 2010-01-08
  • 打赏
  • 举报
回复
改正一下:
Set DataGrid1.DataSource = rst
for I=0 to rst.Fields.Count - 1
DataGrid1.Columns(I).Width = LenB(Trim(rst.Fields(I))) * 120
next
hwmys 2010-01-08
  • 打赏
  • 举报
回复
同意楼上的,如果想简单点,就用下面的代码

Set dbg2.DataSource = rst
for I=0 to rst.Fields.Count - 1
DataGrid1.Columns(I).Width = LenB(Trim(rst.Fields(I))) * 120
next
cbm6666 2010-01-08
  • 打赏
  • 举报
回复
哈哈...还是 MSHflexGrid 好用
chinaboyzyq 2010-01-08
  • 打赏
  • 举报
回复
先与数据绑定,再设置列宽。

Private Sub table_Header()
Set dbg2.DataSource = rst '这是绑定
dbg2.Columns(0).Width = 980
dbg2.Columns(0).Caption = " 站点代码"
dbg2.Columns(1).Width = 1250
dbg2.Columns(1).Caption = " 手机号码"
dbg2.Columns(2).Width = 1580
dbg2.Columns(2).Caption = " 站点IP"
dbg2.Columns(3).Width = 3200
dbg2.Columns(3).Caption = " 站点名称"
End Sub
zrj_518 2010-01-08
  • 打赏
  • 举报
回复
路过,顶。
孤独剑_LPZ 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 patrickkong 的回复:]
引用 6 楼 asftrhgjhkjlkttttttt 的回复:
用循环处理,一个汉字约为110 tmip,用下面的语句可以实现,英文字母也算一个字,近似的算法
DataGrid1.Columns(I).Width = LenB(Trim(rs.Fields(I))) * 120

难道不能用TextWidth
[/Quote]
我的是根据列字符的多少自动调节列宽,需要做循环加载,你说的TextWidth是什么?
Tiger_Zhao 2010-01-07
  • 打赏
  • 举报
回复
DataGrid 进行重新绑定会重新创建列信息。
所以应该在设计时绑定好数据源,在 DataGrid 的右键菜单上选 Retrieve fields 刷新列,然后选右键菜单的 Edit 调整列宽就可以了。
注意在运行时只能刷新数据,不能调用 ReBind 进行重新绑定。
stayor 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 patrickkong 的回复:]
引用 6 楼 asftrhgjhkjlkttttttt 的回复:
用循环处理,一个汉字约为110 tmip,用下面的语句可以实现,英文字母也算一个字,近似的算法
DataGrid1.Columns(I).Width = LenB(Trim(rs.Fields(I))) * 120

难道不能用TextWidth
[/Quote]

两回事儿。
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 asftrhgjhkjlkttttttt 的回复:]
用循环处理,一个汉字约为110 tmip,用下面的语句可以实现,英文字母也算一个字,近似的算法
DataGrid1.Columns(I).Width = LenB(Trim(rs.Fields(I))) * 120
[/Quote]
难道不能用TextWidth
孤独剑_LPZ 2010-01-06
  • 打赏
  • 举报
回复
用循环处理,一个汉字约为110 tmip,用下面的语句可以实现,英文字母也算一个字,近似的算法
DataGrid1.Columns(I).Width = LenB(Trim(rs.Fields(I))) * 120
贝隆 2010-01-06
  • 打赏
  • 举报
回复
帮顶
king06 2010-01-06
  • 打赏
  • 举报
回复
重新检索字段
zdingyun 2010-01-06
  • 打赏
  • 举报
回复
要在设计时实现一个 DataGrid 控件
为您希望访问的数据库创建一个 Microsoft 数据链接 (.UDL) 文件。请参阅“创建 Northwind OLE DB 数据链接”主题,以获得一个示例。
在窗体上放置一个 ADO Data 控件,并将其 ConnectionString 属性设置为在第 1 步中所创建的OLE DB 数据源。
在这个 Ado Data 控件的 RecordSource 属性中输入一条将返回一个记录集的 SQL 语句。例如,
Select * From MyTableName Where CustID = 12
在窗体上放置一个 DataGrid 控件,并将其 DataSource 属性设置为这个 ADO Data 控件。
右键单击该 DataGrid 控件,然后单击“检索字段”。
右键单击该 DataGrid 控件,然后单击“编辑”
重新设置该网格的大小、删除、或添加网格的列。
右键单击该 DataGrid 控件,然后单击“属性”。
使用“属性页”对话框来设置该控件的适当的属性,将该网格配置为所需的外观和行为。
kongxiang112233 2010-01-06
  • 打赏
  • 举报
回复
按内容自适应这个在哪里设置?
LionFlying 2010-01-06
  • 打赏
  • 举报
回复
有没有按内容自适应等影响列宽的属性设置的不对的?

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧