19. november 2006 - 16:49Der er
11 kommentarer og 1 løsning
Conditional formating i DataGrid
Er der nogen der ved om man kan lave conditional formating som i Excel. Jeg har en liste over jobs der bliver hentet i listen, og kollonnen stausid har værdi 1 eller 2. Kan man f.eks. farve rækken rød hvis denne værdi er = 1?
Hej. Jeg bruger ikke datagrid, men msflexgrd. Mon ikke det samme kan gøres i datagrid? her er et eksempel fra et af mine programmer, i stedet for CellbackColor kan man anvende RowBackColor
'indlæsning i grid '------------------------------------- grindhold.Rows = u + 1 For Y = 1 To u For z = 0 To 14 grindhold.Row = Y grindhold.Col = z grindhold.Text = musik(z, Y - 1) If z = 2 Then If musik(8, Y - 1) = "mp3" Then grindhold.CellBackColor = RGB(91, 255, 91) If z = 2 Then If musik(8, Y - 1) = "mpg" Then grindhold.CellBackColor = RGB(255, 127, 255) Next txtnr.BackColor = RGB(255, 255, 255) Next '--------------------------------------
Joern, jeg er måske lidt for rusten til at forstå det. Data'en bliver indlæst via indstillingerne på DataGrid'et så jeg ved ikke rigtigt hvor jeg skulle indsætte koden henne for der er ikke nogen Sub der gennemløber men den skal jeg vel bare oprette i et modul, eller?
Der hvor du skriver grindhold.Rows skal jeg vel bare skrive dgtask.Rows da DataGrid'et hedder dgtask eller er jeg helt i skoven?
Det er vel ikke noget VBA til Access du arbejder med? ...og ikke rigtig Visual Basic.
Men det er korrekt at navnet skal være det, der gælder for din kontrol. Er der ikke andre subrutiner, kan du jo lave en knap. Men ikke noget med modul, bare i din form.
Jeg har kigget på dit eksempel ovenfor igen Joern, og med mine navne så det således ud:
'Indlæsning i grid '------------------------------------- flextask.Rows = h + 1 For Y = 1 To h '- 1 For z = 0 To 8 flextask.Row = Y flextask.Col = z If z = 8 Then If statusname(8, Y - 1) = "Ongoing" Then flextask.CellBackColor = RGB(91, 255, 91) flextask.Text = statusname(z, Y - 1) Next txtnr.BackColor = RGB(255, 255, 255) Next '--------------------------------------
flextask = Navnet på mit flexgrid statusname = navnet på kollonen der skal tjekkes Ongoing = Værdien der skal tjekkes efter
Når jeg så kører den siger den "sub or function not defined" og markerer "statusname" på linjen der starter med "If statusname(8..."
Har du nogen ideer? Skal nok smide nogle point efter dig :-)
I mit eksempel har jeg et array i 2 dimensioner, hvor den første er felterne i databasen og den anden er posterne. Mit felt 8 indeholder oplysning om, at en melodipost også har en MP3-fil, når det er tilfældet får en af cellerne den farve der i RGB er lysgrøn - 255 er fuldt grøn og med lige meget rød og blå bliver den bare lysere. Du kan også vælge blandt VB's faste 16 farver eller angive farven med HEX.
Så hvis din værdi "ongoing" ikke står i felt 8, skal du ændre tallet til det felt, hvor det står. Men hvis du slet ikke anvender array, skal du jo gennemløbe din grid ved at sætte row til at skifte i en løkke.
Col = 6 'hvis din værdi står i række 6
For a = 0 to flextask.rows row = a if flextask.text = "Ongoing" then flextask.row backcolor = RGB(255,0,0) 'Rød next a
Din række med "flextask.Row BackColor" giver fejl ved BackColor, men med følgende får jeg den til at gøre alle rækkerne grønne:
For a = 0 To flextask.Rows Row = a Label1.Caption = flextask.Rows If flextask.Text = "Ongoing" Then flextask.BackColor = RGB(255, 0, 0) 'Rød Else flextask.BackColor = RGB(0, 255, 0) 'Grøn End If Next a
flextask.text er hele tiden lig med ID værdien som er den første kollone i flexgrid'et og det er der fejlen er tror jeg. Jeg prøvede dog lige at flytte feltet der indeholder "Ongoing" frem som det første felt, men alle felter forbliver stadigt grønne....strange
I msflxgrd kan man sætte farver på rækker, kolonner eller celler. Du må kigge om denne property findes for den grid, du anvender.
Måske kan den grid ikke fungere med RBG-funktionen.
Using Defined Constants You don’t need to understand how color values are generated if you use the intrinsic constants listed in the Object Browser. In addition, intrinsic constants do not need to be declared. For example, you can use the constant vbRed whenever you want to specify red as a color argument or color property setting:
BackColor = vbRed
Using Direct Color Settings Using the RGB function or the intrinsic constants to define color are indirect methods. They are indirect because Visual Basic interprets them into the single approach it uses to represent color. If you understand how colors are represented in Visual Basic, you can assign numbers to color properties and arguments that specify color directly. In most cases, it’s much easier to enter these numbers in hexadecimal.
The valid range for a normal RGB color is 0 to 16,777,215 (&HFFFFFF&). Each color setting (property or argument) is a 4-byte integer. The high byte of a number in this range equals 0. The lower 3 bytes, from least to most significant byte, determine the amount of red, green, and blue, respectively. The red, green, and blue components are each represented by a number between 0 and 255 (&HFF).
Consequently, you can specify a color as a hexadecimal number using this syntax:
&HBBGGRR&
The BB specifies the amount of blue, GG the amount of green, and RR the amount of red. Each of these fragments is a two-digit hexadecimal number from 00 to FF. The median value is 80. Thus, the following number specifies gray, which has the median amount of all three colors:
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.