Порядок столбцов DataGridView, похоже, не работает - PullRequest
5 голосов
/ 10 марта 2009

У меня есть 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 для столбца (это работает для всех остальных столбцов), но я не могу отобразить столбец кнопки в правильном месте. Я также попытался добавить столбец кнопки как до, так и после установки остальных столбцов, но, похоже, это не имеет значения. Кто-нибудь может подсказать, что я делаю неправильно? Это сводит меня с ума ....

Ответы [ 4 ]

18 голосов
/ 27 ноября 2009

Я наткнулся на ваш пост, пытаясь решить подобную проблему. Я наконец отследил его, выполнив, как вы упомянули (используя свойство DisplayIndex) и установив для свойства AutoGenerateColumns DataGridView значение false Это свойство не отображается в конструкторе, поэтому я просто добавил его в конструктор для своей формы. Обязательно сделайте это перед настройкой источника данных для вашей сетки.

Надеюсь, это поможет ...

4 голосов
/ 01 октября 2013

AutoCreateColumn является проблемой. В следующей статье приведен пример того, как это исправить.

С DataDridView DisplayOrder не работает

При установке DisplayIndex столбца в виде сетки данных некоторые столбцы вышли из строя. Чтобы решить эту проблему, мне пришлось установить значение AutoGenerateColumns в значение true перед установкой источника данных и значение FALSE после.

Например:

dgvReservedStalls.AutoGenerateColumns = True
dgvReservedStalls.DataSource = clsReservedStalls.LoadDataTable()
dgvReservedStalls.AutoGenerateColumns = False
2 голосов
/ 21 мая 2015

Та же проблема здесь, и после некоторого поиска я обнаружил, что установив 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
0 голосов
/ 26 ноября 2013

Я попробовал вышеуказанные решения без успеха. Потом я нашел эту статью: все стало лучше.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...