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

h2y3641 2005-03-24 06:19:30
请问如何能使dategrid的内容随显示内容自动调整大小或分别设列大小而不是每列都固定的大小?
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧