• 主页
  • VBS
  • .NET技术
  • VBA
  • VB网络编程
  • VB多媒体
  • VB数据库
  • VB控件
  • VB COM/DCOM
  • VB基础类
  • VB API

请问一个关于dategrid的列宽的问题

h2y3641 2005-03-24 06:19:30
请问如何能使dategrid的内容随显示内容自动调整大小或分别设列大小而不是每列都固定的大小?
...全文
42 点赞 收藏 4
写回复
4 条回复
hamadou 2005年03月25日
自适应列宽的例子。但有一个问题,如果数据很多时,难道这样取得最大数据长度为列宽的方法可行吗?呵呵。你参考一下吧!我也是看了一个c#代码的,改过来的。
Option Explicit On
Option Strict On
Imports System.Math
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Sqldpr.Fill(Ds1.Client)
Me.DataGrid1.DataSource = Ds1.Client
SizeColumnsToContent(Me.DataGrid1, -1)
End Sub
Public Sub SizeColumnsToContent(ByVal dataGrid As DataGrid, ByVal nRowsToScan As Integer)
Dim Graphics As Graphics = dataGrid.CreateGraphics
Dim tableStyle As DataGridTableStyle = New DataGridTableStyle()
Try
Dim dataTable As DataTable = CType(dataGrid.DataSource, DataTable)
If nRowsToScan = -1 Then
nRowsToScan = dataTable.Rows.Count
Else
nRowsToScan = System.Math.Min(nRowsToScan, dataTable.Rows.Count)
End If
dataGrid.TableStyles.Clear()
tableStyle.MappingName = dataTable.TableName
Dim columnStyle As DataGridTextBoxColumn
Dim iWidth As Integer
'列循环
Dim icurrcol As Integer
For icurrcol = 0 To dataTable.Columns.Count - 1
Dim dataColumn As DataColumn = dataTable.Columns(icurrcol)
columnStyle = New DataGridTextBoxColumn()
columnStyle.TextBox.Enabled = True
columnStyle.HeaderText = dataColumn.ColumnName
columnStyle.MappingName = dataColumn.ColumnName
'iwidth是测量得到的该列使用指定字体表示的文本的大小(象素转换为int)
iWidth = CInt(Graphics.MeasureString(columnStyle.HeaderText, dataGrid.Font).Width)
Dim dataRow As DataRow
Dim irow As Integer
'行循环
For irow = 0 To nRowsToScan - 1
dataRow = dataTable.Rows(irow)
If Not (dataRow(dataColumn.ColumnName) Is Nothing) Then
'获取这一行(该列)的宽度
Dim iColWidth As Integer = CInt(Graphics.MeasureString(dataRow.ItemArray(icurrcol).ToString(), dataGrid.Font).Width)
'获取这一行(该列)的高度
Dim iColHight As Integer = CInt(Graphics.MeasureString(dataRow.ItemArray(icurrcol).ToString(), dataGrid.Font).Height)
'取得列标题和该列内容长度最大的一个,注意iWidth每次都取最大的列内容长度或列标题宽,以保证最后取得的是最大的值
iWidth = CInt(Max(iWidth, iColWidth))
End If
Next
columnStyle.Width = iWidth + 10
tableStyle.GridColumnStyles.Add(columnStyle)
Next
dataGrid.TableStyles.Add(tableStyle)
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
Graphics.Dispose()
End Try

End Sub
回复 点赞
jsfeiyu 2005年03月24日
同意楼上的!
回复 点赞
n007 2005年03月24日
不可能的!因为每一列的没一个值都有可能不同(绝大部分如此)你的自动就没意义了!
回复 点赞
tihua 2005年03月24日
Dim dg1_style As New DataGridTableStyle
Dim dc1 As New DataGridTextBoxColumn
With dc1
.HeaderText = "编号"
.MappingName = "corp_code"
.NullText = ""
.Width = 150'关键在这里
End With
Me.DataGrid1.DataSource = providerview
dg1_style.GridColumnStyles.Add(dc1)
Me.DataGrid1.TableStyles.Add(dg1_style)
回复 点赞
发动态
发帖子
VB
创建于2007-09-28

1.1w+

社区成员

11.0w+

社区内容

VB技术相关讨论,主要为经典vb,即VB6.0
社区公告
暂无公告