2016-05-11 5 views
0

Я не понимаю, почему этот код не работает:vb.net ListView не будет принимать настройки цвета

For Each rec As DataRow In rex 
     Dim entry As New ListViewItem({rec("Project"), rec("effort")}) 
     entry.BackColor = Color.DarkSlateGray 
     entry.ForeColor = Color.Ivory 
     BreakdownListview.Items.Add(entry) 
    Next 

В 2 настройки цвета полностью игнорируются. Элемент управления имеет белый фон и черный текст.

+0

Если данные уже находятся в формате данных, зачем их копировать для отображения в списке. Используйте DataTable в качестве источника данных для DGV; одна строка кода, а не копирование данных. В противном случае невозможно воспроизвести – Plutonix

+0

Нет данных. rex - это ArrayList из DataRows, извлеченных из запроса. Никогда не имеет более 6 или 7 элементов. Кажется, избыток для данных, но я буду изучать его. Благодарю. Это предполагает, конечно, что DGV позволит мне управлять настройками цвета 2 лучше, чем это делает список. –

+0

ArrayList также устарел. Когда вы запускаете запрос, вы можете заполнить DT, используя 'cmd.ExecuteReader', и является идеальным контейнером для результатов db. Еще одна строка кода создаст весь столбец, который нужен DGV, и отобразит в нем данные строки. у него есть куча и куча свойств для финализации дисплея. – Plutonix

ответ

0

BackColor и ForeColor игнорируются, если элемент выбран, лучше всего установить OwnerDraw в true в ListView и нарисовать элементы самостоятельно.

Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem 
    If e.Item.Selected Then 
     Dim Brush As New SolidBrush(Color.SlateGray) 
     e.Graphics.FillRectangle(Brush, e.Bounds) 
     Brush.Dispose() 
    Else 
     Dim Brush As New SolidBrush(e.SubItem.BackColor) 
     e.Graphics.FillRectangle(Brush, e.Bounds) 
     Brush.Dispose() 
    End If 

    e.DrawText(TextFormatFlags.VerticalCenter) 
    e.DrawFocusRectangle(e.Bounds) 
End Sub 

Private Sub ListView1_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader 
    e.DrawDefault = True 
End Sub 
+0

Хм. Я ценю ваши усилия, но это слишком много кода, чтобы установить пару свойств цвета. Кроме того, речь идет не о выбранном элементе. Я просто хотел, чтобы все записи имели эти цвета. Спасибо хоть. –