Datagridview не изменяет изображение в ячейке

#vb.net #winforms #datagridview #datagridviewimagecolumn

#vb.net #winforms #datagridview #datagridviewimagecolumn

Вопрос:

Я работаю с DataGridViewObject в моей форме Windows, используя VB.NET . У меня есть три столбца, в которых должны отображаться значки. Но, основываясь на некоторой информации из строки, эти значки будут отображаться или нет. Моя проблема в том, что изображение не изменится, когда я изменю его значение. В принципе, я определяю свои столбцы следующим образом:

 Dim column1 As DataGridViewImageColumn = New DataGridViewImageColumn()
column1.Image = My.Resources.image1
column1.Width = 30
dw.Columns.Add(column1)

Dim column2 As DataGridViewImageColumn = New DataGridViewImageColumn()
column2.Image = My.Resources.image2
column2.Width = 30
dw.Columns.Add(column2)

Dim column3 As DataGridViewImageColumn = New DataGridViewImageColumn()
column3.Image = My.Resources.image3
column3.Width = 30
dw.Columns.Add(column3)
  

После заполнения данных я перебираю строки, и если я не хочу показывать изображения в этой строке, я делаю:

 Dim cell1 As DataGridViewImageCell = row.Cells(9)
Dim cell2 As DataGridViewImageCell = row.Cells(10)
Dim cell3 As DataGridViewImageCell = row.Cells(11)

cell1.Value = Nothing
cell2.Value = Nothing
cell3.Value = Nothing
  

Но мои изображения остаются. Кто-нибудь знает, чего мне не хватает?

Комментарии:

1. Привязан ли DGV к чему-то? Ваша другая проблема заключается в том, что ваше приложение протекает.

2. Да, я установил для его источника данных значение DataTable, содержимое загружается из базы данных. Извините, но что вы подразумеваете под этим «утечка приложения»?

3. Изменятся ли изображения после редактирования? Например, если пользователь изменит строку с активной на неактивную, изменится ли она или они статичны? (это может быть утечка, но она потребляет больше ресурсов, чем нужно).

4. Они статичны. Когда данные загружаются, они отображаются или скрываются, и так оно и остается.

Ответ №1:

Вы используете некоторые несвязанные DataGridViewImageColumn и, как указано в документах, Image свойство указывает изображение, которое отображается в ячейках без значений, когда столбец не привязан к данным.

Таким образом, устанавливая значение ячейки равным null, вы заставляете ячейку отображать Image свойство.

Для решения проблемы:

  1. Для ваших столбцов, установленных column.DefaultCellStyle.NullValue = Nothing
  2. Не устанавливайте Image свойство.
  3. Каждый раз, когда вы хотите отобразить изображение, присваивайте изображение Value свойству ячейки.

Вы можете установить значение ячейки вручную в цикле или с помощью CellFormatting события. Например:

 Private Sub DataGridView1_CellFormatting(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) _
Handles DataGridView1.CellFormatting

    If (e.RowIndex >= 0 AndAlso e.ColumnIndex = 2) Then 
        If (e.RowIndex Mod 2 = 0) Then 'Use any criteria which you need, it's a test
            e.Value = My.Resources.Image1
        Else
            e.Value = DBNull.Value
            e.CellStyle.NullValue = Nothing
        End If
    End If

   ' Do the same for other image columns. 

End Sub