CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

datagrid的列宽问题

楼主ebbtiger(爱财)2005-01-14 23:38:05 在 .NET技术 / VB.NET 提问

如何使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

相关问题

  • datagrid 的列宽
  • DataGrid列宽问题
  • 控制DataGrid的列宽
  • 如何设置datagrid的列宽?
  • 关于datagrid的列宽,怎么控制
  • 马上给分!datagrid列宽问题??
  • 关于datagrid列宽的问题
  • 怎样动态调整datagrid的列宽?
  • winform中,DataGrid如何自定义列宽?
  • DataGrid的列宽控制问题????

关键词

  • datagrid
  • 控制
  • 列宽
  • tablestyles
  • columnstyle
  • nrowstoscan
  • gridcolumnstyles
  • icurrcol
  • 列
  • iwidth

得分解答快速导航

  • 帖主:ebbtiger
  • Paradise_heida
  • webserv2
  • synchen
  • hj7396
  • hj7396
  • hj7396

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo