Vybarvení řádků v datagridview   zodpovězená otázka

VB.NET

Dobrý den,

mám dotaz jak ošetřit toto chování vb.net.

Mám aplikaci a ta otevírá pomocná okna, v nich je většinou datagridview a maximálně jedno či dvě tlačítka. Okno se otevře a do tabulky se i správně naplní data. Pak to projdu tímto cyklem

For Each row As DataGridViewRow In DG_Zbozi.Rows
                If (row.Cells(11).Value) = 0 Then
                    row.DefaultCellStyle.BackColor = Color.Red
                  End If
            Next

který by měl obarvit 0 řádky na červeno. A zde nastává problém, pokud už je okno načtené je zobrazené, tak to udělá na 100%, ale jakmile je to volané hned po aktivaci okna ( Private Sub Okno_Load...) tak se to někdy obarví a někdy ne. Pokud před ten cyklus dám sleep(1000), tak se to vybarví skoro pokaždé, ale na toto nechci spoléhat, zaprvé to zdržuje a za druhé to neni 100%. Nevíte někdo, čím je to způsobené a zda existuje nějaký příznak, který by se dal kontrolovat a podle něj poznat zda už tabulka bude akceptovat barvy či ne?

Děkuji

Přemek

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vypadá to, že obarvujete řádky dříve, než je tabulka naplněna daty. Jakým způsobem tabulku plníte ? Pokud data bindingem, zkuste je obarvovat až po vyvolání eventu DataBindingComplete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

vyplňuji je takto:

        Dim da As New System.Data.SqlClient.SqlDataAdapter(command)
        Dim dt As New DataTable
        da.Fill(dt)
        DG_Zbozi.DataSource = dt

že by to bylo nenaplněno se mi nezdá, když si tam dám break point a pak to krokuji, tak to přesně projde ten cyklus a i to správné řádky identifikuje a snaží se obarvit (udělal jsem si test o 4 řádcích z toho 2 se mají obarvit). Ale stejně pak na obrazovce jsou všechny ve výchozí barvě.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Myslím si, že se skutečně snažíte obarvit řádky dříve, než se celé DGV naplní. Zkuste ten cyklus pro obarvení spustit, resp. dát za tu proceduru, která plní DGV daty.

Dim da As New System.Data.SqlClient.SqlDataAdapter(command)
Dim dt As New DataTable
da.Fill(dt)
DG_Zbozi.DataSource = dt

For Each row As DataGridViewRow In DG_Zbozi.Rows
                If (row.Cells(11).Value) = 0 Then
                    row.DefaultCellStyle.BackColor = Color.Red
                  End If
            Next
nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak to mám, dokonce mezi tím vyplněním a barvou ještě nastavuji šířku sloupců,zarovnání a formát pro čísla, a to se provede bez problémů, čísla jsou zobrazená na dvě des. místa, jsou zarovnaný doprava. I šířka sloupců se nastaví. Jediné co ne je ta barva a vůbec nemůžu přijít na to proč.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Cyklus pro procházení řádku vynechejte a místo toho využijte událost DataGridView.RowPrePaint.

    Private Sub DG_Zbozi_RowPrePaint(sender As Object, e As System.Windows.Forms.DataGridViewRowPrePaintEventArgs) Handles DG_Zbozi.RowPrePaint
        Dim row As DataGridViewRow = Me.DG_Zbozi.Rows(e.RowIndex)
        With row
            If (.Cells(11).Value = 0) Then
                .DefaultCellStyle.BackColor = Color.Red
            End If
        End With
    End Sub
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den,

děkuji za radu, funguje to na výbornou.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback