VB.net - Динамически создаваемый столбец с изображением, не отображающим изображение в новой строке в представлении данных.

Я строю сетку динамически и хочу, чтобы изображение было удалено в качестве последнего отображаемого столбца.

Изображение хорошо отображается в строке, которую я добавляю, но в новой строке нет изображения. Что мне не хватает?

Когда я запускаю следующий код, я получаю одну строку с изображением, а вторую пустую строку со значком "отсутствует изображение":

Public Class Testing
Private dtData As New DataTable

Private Sub Testing_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    LoadMyGrid()
End Sub

Private Sub LoadMyGrid()
    Try


        Dim img As New DataGridViewImageColumn
        Dim inImg As Image = My.Resources.delete
        img.Image = inImg

        dtData.Columns.Add("LanguageId")
        dtData.Columns.Add("Language")
        dtData.Rows.Add(1, "English")

        '--- Load the grid
        With Me.dgv1
            .Columns.Clear()

            .DataSource = dtData
            .Columns(0).Visible = False

            dgv1.Columns.Add(img)
            img.Width = 40
            img.Name = "DELETE"

            .ClearSelection()
        End With
    Catch ex As Exception
        MsgBox("You hit an error")
    End Try
End Sub

End Class

Спасибо за любую помощь!

1 ответ

  1. Добавить переменную для хранения положения столбца DELETE

       Private dgv1DeleteCellIndex as integer = -1
    
  2. В LoadGrid установите dgv1DeleteCellIndex, найдите его перед добавлением столбца DELETE.

       dgv1DeleteCellIndex = dgv1.Columns.Count
    
  3. После добавления столбца DELETE выполните цикл по столбцам и установите значение ячейки для изображения.

    For Each row As DataGridViewRow In dgv1.Rows
       row.Cells(dgv1DeleteCellIndex).Value = My.Resources.delete_16x16
    Next
    
  4. Обновите изображение ячейки в событии RowsAdded, чтобы продолжить обновлять изображение в любых дополнительных новых строках, добавленных пользователем.

    Private Sub dgv1_RowsAdded(sender As Object, e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles dgv1.RowsAdded
       If dgv1DeleteCellIndex <= 1 Then Exit Sub
    
       CType(sender, DataGridView).Rows(e.RowIndex).Cells(dgv1DeleteCellIndex).Value = My.Resources.delete_16x16
    End Sub
    
Другие вопросы по тегам