自适应列宽的例子。但有一个问题,如果数据很多时,难道这样取得最大数据长度为列宽的方法可行吗?呵呵。你参考一下吧!我也是看了一个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
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)