在VB.net中自动调整Datagridview的行大小不起作用
您好,我正在用数据库中的动态数据制作一个备忘录类型的数据网格 不知何故,我无法使行自动调整大小。 我几乎什么都试过了,下面是我的一些代码片段,我把它们放在表单加载子中:在VB.net中自动调整Datagridview的行大小不起作用,vb.net,datagridview,visual-studio-2017,row,autosize,Vb.net,Datagridview,Visual Studio 2017,Row,Autosize,您好,我正在用数据库中的动态数据制作一个备忘录类型的数据网格 不知何故,我无法使行自动调整大小。 我几乎什么都试过了,下面是我的一些代码片段,我把它们放在表单加载子中: DataGridView2.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells DataGridView2.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.
DataGridView2.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
DataGridView2.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
DataGridView2.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
DataGridView2.Columns(2).DefaultCellStyle.WrapMode = DataGridViewTriState.True
DataGridView2.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders
结果如下:
DataGridView2.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
DataGridView2.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
DataGridView2.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
DataGridView2.Columns(2).DefaultCellStyle.WrapMode = DataGridViewTriState.True
DataGridView2.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders
之后,我尝试在DataGridView2.cellPaint事件中使用此选项
If e.Value Is Nothing Then Return
Dim s = e.Graphics.MeasureString(e.Value.ToString(), DataGridView2.Font)
If s.Width > DataGridView2.Columns(e.ColumnIndex).Width Then
Using gridBrush As Brush = New SolidBrush(DataGridView2.GridColor), backColorBrush As Brush = New SolidBrush(e.CellStyle.BackColor)
Using gridLinePen As Pen = New Pen(gridBrush)
e.Graphics.FillRectangle(backColorBrush, e.CellBounds)
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right, e.CellBounds.Bottom - 1)
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
e.Graphics.DrawString(e.Value.ToString(), DataGridView2.Font, Brushes.Black, e.CellBounds, StringFormat.GenericDefault)
DataGridView2.Rows(e.RowIndex).Height = CInt((s.Height * Math.Ceiling(s.Width / DataGridView2.Columns(e.ColumnIndex).Width)))
e.Handled = True
End Using
End Using
End If
结果如下:
DataGridView2.Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
DataGridView2.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
DataGridView2.Columns(2).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
DataGridView2.Columns(2).DefaultCellStyle.WrapMode = DataGridViewTriState.True
DataGridView2.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders
试图摆弄所有属性,但我似乎无法理解,提前谢谢你以下是我遵循的流程:
- 在表单上删除了一个新的datagridview(实际上我将其从datasources窗口中拖出,因为我在项目中已经有了一个dataset)
- 选择编辑列,选择列,单击其中一个字符串列的DefaultCellStyle旁边的
,将WrapMode设置为True[…]
- 将DGV的
设置为AllCellsAutoSizeRowsMode
- 将长字符串插入dgv绑定到的基础数据表:
- 结果是:
可以考虑在DATGRIDVIEW中对元素进行中心化:
DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
DataGridView2.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
结果如下:
是的,我试过了,但结果还是和我的一样。我认为问题在于我用数据集动态填充DGV。我将尝试用普通的SQL数据读取器填充它。“用数据集动态填充DGV”是什么意思?数据集不包含数据;它们包含数据表(数据表包含包含数据的行)。上面提到的datagridview I screnshot绑定到一个datatable(在数据集中),当该datatable充满数据时,DGV行将调整大小以显示它。。