在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的
    AutoSizeRowsMode
    设置为AllCells

  • 将长字符串插入dgv绑定到的基础数据表:

  • 结果是:

可以考虑在DATGRIDVIEW中对元素进行中心化:

    DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells
    DataGridView2.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
结果如下:


是的,我试过了,但结果还是和我的一样。我认为问题在于我用数据集动态填充DGV。我将尝试用普通的SQL数据读取器填充它。“用数据集动态填充DGV”是什么意思?数据集不包含数据;它们包含数据表(数据表包含包含数据的行)。上面提到的datagridview I screnshot绑定到一个datatable(在数据集中),当该datatable充满数据时,DGV行将调整大小以显示它。。