DataGridView 列顺序似乎不起作用

问题描述 投票:0回答:4

我有一个绑定到业务对象列表的 DataGridView:

Dim template As New IncidentTemplate
Dim temps As List(Of IncidentTemplate) = template.LoadAll
Dim bs As New BindingSource

If Not temps Is Nothing Then

   bs.DataSource = temps
   Me.dgvTemplates.DataSource = bs

End If

然后我添加一个未绑定的按钮列并使一些绑定的列不可见:

        Dim BtnCol As New DataGridViewButtonColumn
        With BtnCol
            .Name = "Edit"
            .Text = "Edit"
            .HeaderText = String.Empty
            .ToolTipText = "Edit this Template"
            .UseColumnTextForButtonValue = True
        End With

        .Columns.Add(BtnCol)
        BtnCol = Nothing

        For Each col As DataGridViewColumn In Me.dgvTemplates.Columns

               Select Case col.Name

                Case "Name"
                    col.DisplayIndex = 0
                    col.FillWeight = 100
                    col.Visible = True

                Case "Description"
                    col.DisplayIndex = 1
                    col.FillWeight = 100
                    col.Visible = True

                Case "Created"
                    col.DisplayIndex = 3
                    col.HeaderText = "Created On"
                    col.DefaultCellStyle.Format = "d"
                    col.FillWeight = 75
                    col.Visible = True

                Case "CreatedBy"
                    col.DisplayIndex = 2
                    col.HeaderText = "Created By"
                    col.FillWeight = 75
                    col.Visible = True

                Case "Edit"
                    col.DisplayIndex = 4
                    col.HeaderText = ""
                    col.FillWeight = 30
                    col.Visible = True

                Case Else
                    col.Visible = False

            End Select

        Next

这似乎工作得相当好,除了无论我做什么,按钮列(编辑)总是显示在其他列的中间而不是最后。我尝试过 DGV.Columns.Add 和 DGV.Columns.Insert 以及设置列的 DisplayIndex (这适用于所有其他列),但我无法使按钮列显示在正确的位置。我还尝试在设置其余列之前和之后添加按钮列,但这似乎没有什么区别有人可以建议我做错了什么吗?这让我发疯......

vb.net datagridview
4个回答
26
投票

我在寻求解决类似问题时偶然发现了您的帖子。我最终通过按照您提到的方式(使用

DisplayIndex
属性)并将
AutoGenerateColumns
DataGridView
属性设置为 false 来追踪它。此属性在设计器中不可见,因此我只是将其添加到表单的构造函数中。请务必在为网格设置数据源之前执行此操作。

希望这有帮助...


9
投票

AutoCreateColumn 是问题所在。以下文章提供了如何修复它的示例。

来自 DataDridView DisplayOrder 不起作用

在数据网格视图中设置列的 DisplayIndex 时,某些列的顺序不正确。为了解决这个问题,我必须在设置数据源之前将 AutoGenerateColumns 设置为 true,然后设置为 FALSE。

例如:

dgvReservedStalls.AutoGenerateColumns = True
dgvReservedStalls.DataSource = clsReservedStalls.LoadDataTable()
dgvReservedStalls.AutoGenerateColumns = False

2
投票

这里同样的问题,经过一段时间的搜索,我发现通过按升序设置 DisplayIndexes 可以为我解决问题。

这是违反直觉的,因为它是一个数字,但我仍然必须按顺序设置它们。

这有效:

With customersDataGridView
    .Columns("ContactName").DisplayIndex = 0
    .Columns("ContactTitle").DisplayIndex = 1
    .Columns("City").DisplayIndex = 2
    .Columns("Country").DisplayIndex = 3
    .Columns("CompanyName").DisplayIndex = 4
End With

虽然这没有:

With customersDataGridView
    .Columns("ContactName").DisplayIndex = 0
    .Columns("CompanyName").DisplayIndex = 4
    .Columns("Country").DisplayIndex = 3
    .Columns("ContactTitle").DisplayIndex = 1
    .Columns("City").DisplayIndex = 2
End With

1
投票

我尝试了上述解决方案,但没有成功。然后我发现这篇文章:它让一切变得更好。

http://msdn.microsoft.com/en-us/library/vstudio/wkfe535h(v=vs.100).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

© www.soinside.com 2019 - 2024. All rights reserved.