zoukankan      html  css  js  c++  java
  • 根据表格内容,自动调整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

  • 相关阅读:
    ACM ICPC 2008–2009 NEERC MSC A, B, C, G, L
    POJ 1088 滑雪 DP
    UVA 11584 最短回文串划分 DP
    POJ 2531 Network Saboteur DFS+剪枝
    UVa 10739 String to Palindrome 字符串dp
    UVa 11151 Longest Palindrome 字符串dp
    UVa 10154 Weights and Measures dp 降维
    UVa 10271 Chopsticks dp
    UVa 10617 Again Palindrome 字符串dp
    UVa 10651 Pebble Solitaire 状态压缩 dp
  • 原文地址:https://www.cnblogs.com/yunbo/p/1545247.html
Copyright © 2011-2022 走看看