datagrid的列宽问题
如何使datagrid的数据列宽自动伸缩到恰好容纳数据内容的长度? 问题点数:20、回复次数:11Top
1 楼exing(铱星)回复于 2005-01-15 08:15:24 得分 0
不允许换行就行了Top
2 楼hello_sun(sun)回复于 2005-01-15 08:44:50 得分 0
本身有属性 设置一下了Top
3 楼Paradise_heida(学海无涯,回头是岸!)回复于 2005-01-15 09:36:28 得分 1
控制列宽的方法有如下代码:
Dim MyTblStyle As New System.Windows.Forms.DataGridTableStyle
Me.DataGrid1.TableStyles.Add(MyTblStyle)
Me.DataGrid1.TableStyles.Item(0).GridColumnStyles(0).Width = 10
Me.DataGrid1.TableStyles.Item(0).GridColumnStyles(1).Width = 100
其中,DataGrid1是你的DataGrid名;
Item(0)指的是第二行代码添加的一个实例化以后的TableStyles,因为就添加了一个TableStyles,所以它的索引是0;
GridColumnStyles是DataGrid1的列的样式,而GridColumnStyles(0)是从左数第一个列的属性;
GridColumnStyles(0).Width = 0 就是把从左数第一个列的宽度设置为10,同样道理,
GridColumnStyles(1).Width = 100
就是把从左数第二个列的宽度设置为100。
Top
4 楼ebbtiger(爱财)回复于 2005-01-15 22:01:35 得分 0
to exing(铱星) 怎么可以不允许换行?
to hello_sun(sun) 设置哪个属性?
to Paradise_heida(学海无涯,回头是岸!) 不想固定列宽,使其动态调整,该如何?
谢谢各位。
Top
5 楼webserv2(New life New job)回复于 2005-01-15 22:52:26 得分 5
'控制dategrid列宽度自动适应函数
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 -1 = nRowsToScan 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
For iCurrCol As Integer = 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 = CInt(Graphics.MeasureString(columnStyle.HeaderText, dataGrid.Font).Width)
Dim dataRow As DataRow
For iRow As Integer = 0 To nRowsToScan - 1
dataRow = dataTable.Rows(iRow)
If dataRow(dataColumn.ColumnName) <> 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 = CInt(System.Math.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
Top
6 楼synchen(最后期限)回复于 2005-01-16 08:40:47 得分 1
做个标记,学习一下Top
7 楼hj7396(豇豆)回复于 2005-01-21 23:08:09 得分 5
控制某列(列号)自动适应宽度:
Public Shared Sub ColAutoResize(ByVal g As DataGrid, ByVal col As Integer)
Dim manager1 As CurrencyManager = GetListManager(g)
If (manager1 Is Nothing) Then
Return
End If
Dim graphics1 As Graphics = g.CreateGraphics
Try
Dim font1 As Font
Dim myGridTable As DataGridTableStyle
If CType(g.TableStyles, ICollection).Count > 0 Then
myGridTable = g.TableStyles(0)
End If
Dim style1 As DataGridColumnStyle = myGridTable.GridColumnStyles.Item(col)
Dim text1 As String = style1.HeaderText
font1 = myGridTable.HeaderFont
Dim ef1 As SizeF = graphics1.MeasureString(text1, font1)
Dim num1 As Integer = ((CType(ef1.Width, Integer) + myGridTable.PreferredRowHeight) + 1)
Dim num2 As Integer = manager1.Count
Dim num3 As Integer
For num3 = 0 To num2 - 1
Dim obj1 As Object = g.Item(num3, col)
Dim size1 As Size = GetPreferredSize(graphics1, obj1, style1)
Dim num4 As Integer = size1.Width
If (num4 > num1) Then
num1 = num4
End If
Next num3
If (style1.Width = num1) Then
Return
End If
style1.Width = num1
g.PerformLayout()
g.Invalidate()
Finally
graphics1.Dispose()
End Try
End SubTop
8 楼hj7396(豇豆)回复于 2005-01-21 23:09:08 得分 5
控制某列(列名)自动适应宽度:
Public Shared Sub SortCol(ByVal g As DataGrid, ByVal col As Integer, ByVal direct As ListSortDirection)
Dim myGridTable As DataGridTableStyle
If CType(g.TableStyles, ICollection).Count > 0 Then
myGridTable = g.TableStyles(0)
Else
myGridTable = New DataGridTableStyle
Dim dt As DataTable
If TypeOf (g.DataSource) Is DataTable Then
dt = g.DataSource
Else
dt = CType(g.DataSource, DataSet).Tables(g.DataMember)
End If
For Each dc As DataColumn In dt.Columns
Dim s As String = dc.Caption
Dim txtCol As DataGridColumnStyle
txtCol = New DataGridTextBoxColumn
txtCol.MappingName = s
txtCol.HeaderText = s
myGridTable.GridColumnStyles.Add(txtCol)
Next
g.TableStyles.Add(myGridTable)
End If
Dim style As DataGridColumnStyle = myGridTable.GridColumnStyles.Item(col)
Dim manager As CurrencyManager = GetListManager(g)
If (TypeOf manager.List Is IBindingList AndAlso CType(manager.List, IBindingList).SupportsSorting) Then
CType(manager.List, IBindingList).ApplySort(style.PropertyDescriptor, direct)
End If
g.Invalidate()
End SubTop
9 楼chenxiaoguo20(chenxiaoguo20)回复于 2005-01-23 13:54:01 得分 0
学习....Top
10 楼hamadou(闵峰--为了理想而奋斗)回复于 2005-01-23 14:46:17 得分 0
学习!Top
11 楼hj7396(豇豆)回复于 2005-01-23 22:11:27 得分 3
解决了问题楼主也不给分?:D 好郁闷Top





