.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
根据表格内容,自动调整VB.NET中Datagrid控件单元格宽度

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

       用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

效果如图示:
1窗体导入时


2单击[调整第一列宽]后


3单击[调整所有列宽]后


  




相关文章

相关软件