根据表格内容,自动调整VB.NET中Datagrid控件单元格宽度

      用Datagrid控件显示表格数据,当表格内容过多时,Datagrid控件单元格宽度并不足以用来完全显示表格中的数据内容。而只有自己每次去拉动分界线,来进行调整。当出现表格字段比较多时,这样做就显得很麻烦。
以下是用程序根据表格内容来自动调整Datagrid控件单元格宽度。
先定义一个Sub过程AutoSizeCol,用来调整Datagrid中的列宽。
如下:
Public Sub AutoSizeCol(ByVal col As Integer)
  Dim width As Single
  width = 0
  Dim numRows As Integer
  numRows = CType(dataGrid1.DataSource, DataTable).Rows.Count
  Dim g As Graphics
  g = Graphics.FromHwnd(dataGrid1.Handle)
  Dim sf As StringFormat
  sf = New StringFormat(StringFormat.GenericTypographic)
  Dim size As SizeF
  Dim i As Integer
  i = 0

  Do While (i < numRows)
    size = g.MeasureString(dataGrid1(i, col).ToString, dataGrid1.Font, 500, sf)
    If (size.Width > width) Then
       width = size.Width
    End If
    i = (i + 1)
    Loop

   g.Dispose()
   dataGrid1.TableStyles("customers").GridColumnStyles(col).Width = CType(width, Integer)

End Sub

现在就可以表格内容来定义整张表所有列的宽度了。如下:
Public Sub AutoSizeTable()
  Dim numCols As Integer
  numCols = CType(dataGrid1.DataSource, DataTable).Columns.Count
  Dim i As Integer
  i = 0
  Do While (i < numCols)
    AutoSizeCol(i)
    i = (i + 1)
  Loop
End Sub

只要使用以上两个Sub过程就可以达到你想要的结果了!

一个完整的实例如下:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles   MyBase.Load
  Dim connString As String
  connString = "Provider=Microsoft.JET.OLEDB.4.0;data source=northwind.mdb"
  Dim sqlString As String
  sqlString = "SELECT * FROM customers"
  Dim dataAdapter As OleDbDataAdapter
  dataAdapter = Nothing
  Dim _dataSet As DataSet
  _dataSet = Nothing

Try

  Dim connection As OleDbConnection
  connection = New OleDbConnection(connString)

  dataAdapter = New OleDbDataAdapter(sqlString, connection)

  _dataSet = New DataSet
  dataAdapter.Fill(_dataSet, "customers")
  connection.Close()
  Catch ex As Exception
MessageBox.Show("出错!")
  Me.Close()
  Return
End Try
  Dim tableStyle As DataGridTableStyle
  tableStyle = New DataGridTableStyle
  tableStyle.MappingName = "customers"

  dataGrid1.TableStyles.Clear()
  dataGrid1.TableStyles.Add(tableStyle)
  dataGrid1.DataSource = _dataSet.Tables("customers")
End Sub

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
  AutoSizeTable()
End Sub

Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles   button2.Click
  AutoSizeCol(1)
End Sub
 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1202666

转载于:https://www.cnblogs.com/antony1029/archive/2006/09/13/503669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值