Vb.net DataGridView列顺序似乎不起作用

Vb.net DataGridView列顺序似乎不起作用,vb.net,datagridview,Vb.net,Datagridview,我将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 然后

我将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(这适用于所有其他列),但无法使按钮列显示在正确的位置。我还尝试在设置其余列之前和之后添加按钮列,但这似乎没有什么区别。有人能告诉我哪里做错了吗?这让我发疯了……

我在寻找解决类似问题的方法时偶然发现了你的帖子。最后,我按照您提到的方法(使用
DisplayIndex
属性)将
DataGridView
AutoGenerateColumns
属性设置为false,找到了它。此属性在设计器中不可见,因此我只是将其添加到窗体的构造函数中。在为网格设置数据源之前,请确保执行此操作


希望这有帮助…

自动创建列就是问题所在。下面的文章给出了一个如何修复它的示例

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

例如:


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


这里也有同样的问题,在搜索了一段时间后,我发现通过按升序设置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

对我来说,我使用设计器来添加列(有些是映射的,有些不是),但我仍然使列无序。设置
AutoGenerateColumns=false在绑定之前完成了这个技巧。谢谢你,伙计。这个对我有用。你也可以自动生成列,然后重新排序。
With customersDataGridView
    .Columns("ContactName").DisplayIndex = 0
    .Columns("CompanyName").DisplayIndex = 4
    .Columns("Country").DisplayIndex = 3
    .Columns("ContactTitle").DisplayIndex = 1
    .Columns("City").DisplayIndex = 2
End With