Aiuto : datagrid selezione con piu colori

lunedì 09 ottobre 2006 - 10.17

basicdany Profilo | Expert

Ciao, a tutti, in vb.net devo selezionare dei record di un datagrid di diverso colore in base al valore di un campo di una tabella, e possibile far questo ho il datagrid permette di selezionare un solo colore?
grazie a tutti

giulyxiano Profilo | Junior Member

Come prima cosa scusa se te lo dico ma nel tuo messaggio "Ho" non è verbo è una disgiunzione quindi devi scrivere "o" ti ripeto scusa se ti faccio notare questa sottigliezza.
Per quanto riguarda il datagrid io ho risolto la cosa facendo così: se la riga non è ok allora selezionala e colorala con un colore altrimenti se è ok colorala du in altro colore. Questo è il problema logico, devi però andare a scrivere del codice.
Greco Giuliano

basicdany Profilo | Expert

Ok e chiaro come concetto, grazie per l'interesse, ora però a livello di codice come si fa questo, avresti quache piccolo esempio da passarmi, grazie tanto.
ciao

giulyxiano Profilo | Junior Member

scrivo codice e pseudo codice che integrerai con le tue cose specifiche..

scrivi due Private Sub SelezionaRigaRossa(riga) e SelezionaRogaVerde(riga)

Private Sub selezionaRigaRossa(Byval riga as Integer)
DataGrid.Select(riga)
DatagRid.TableStyle(0).SelectionBackColor = Color.Red
End Sub

Private Sub selezionaRigaVerde(Byval riga as Integer)
DataGrid.Select(riga)
DatagRid.TableStyle(0).SelectionBackColor = Color.Green
End Sub

....nel tuo codice farai sicuramente dei controlli sul valore della cella veo?
Allora:

If il valore della cella...<.>.= Then

selezionaRigaRossa(indicedella riga da selezionare)

end If

If il valore della cella...<.>.= Then

selezionaRigaVerde(indicedella riga da selezionare)

end If

spero che va bene ma devi scriverlo per il tuo codice...
Greco Giuliano

basicdany Profilo | Expert

ciao, grazie tanto, provo il tutto e ti faccio sapere.

basicdany Profilo | Expert

Ciao, no sono riuscito a realizzareniente con il codice che mi hai postato,
ti invio codice che utilizzo per impostare datagrid, ti ripeto il mio problema e quello
di colorare deri record nella grigla di diverso colore in base al nome contenuto nel record,
quindi:
se nel campo c'e pippo =colore riga rosso,
se c'è anna=colore riga giallo.
se c'è rossi=colore riga verde

Dim gridStyle As New DataGridTableStyle
gridStyle.MappingName = tabella

Sql = "SELECT * FROM Clienti"

Dim cn As New OleDbConnection(Connessione)
Dim da As New OleDbDataAdapter(Sql, cn)
Dim ds As New DataSet
cn.Open()
da.Fill(ds, TABPrimaNotaRighe)
DataGrid1.DataSource = ds.Tables(TABPrimaNotaRighe)

'Nome
Dim codiceStyle As New DataGridTextBoxColumn
codiceStyle.MappingName = "Nome"
codiceStyle.HeaderText = "Nome"
codiceStyle.Width = 0
codiceStyle.NullText = ""
codiceStyle.Alignment = HorizontalAlignment.Center
codiceStyle.TextBox.BackColor = Color.White
gridStyle.GridColumnStyles.Add(codiceStyle)

'indirizzo
Dim DataStyle As New DataGridTextBoxColumn
DataStyle.MappingName = "Indirizzo"
DataStyle.HeaderText = "Indirizzo"
DataStyle.Width = 100
DataStyle.NullText = ""
DataStyle.Alignment = HorizontalAlignment.Left
DataStyle.TextBox.BackColor = Color.Red
gridStyle.GridColumnStyles.Add(DataStyle)

DataGrid1.TableStyles.Clear()
DataGrid1.TableStyles.Add(gridStyle)

Aspetto tua risposta, grazie tento

giulyxiano Profilo | Junior Member

Dim i as integer
Dim test as String

For i=0 To Tuodataset.Tables(0).Rows.Count-1

Test=Tuodataset.Tables(0).Rows(i).Item("Nome")

If Test="Anna" Then

ColoraRosso(i)

Elseif Test="Giorgio" Then

ColoraGiallo(i)
.....
End if

Next

'dove ColoraRosso(i) sono le procedure che ti avevo scritto
'che seleziona la riga che gli passi e la colora.
'Io ho presupposto che la tua tabella nel tuo dataset sia la tabella (0) zero

'prova e a presto.
Greco Giuliano

basicdany Profilo | Expert

ok, grazie

basicdany Profilo | Expert

Scusami se ti disturbo
Ecco la procedura che ho fatto:


Dim Sql As String
Dim Connessione As String = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\prova.mdb" & ";"

Sql = "SELECT * FROM Prova"
Dim cn As New OleDbConnection(Connessione)
Dim da As New OleDbDataAdapter(Sql, cn)
Dim ds As New DataSet
cn.Open()
da.Fill(ds, "Prova")
DataGrid1.DataSource = ds.Tables("Prova")

Dim i As Integer
Dim test As String

For i = 0 To ds.Tables(0).Rows.Count - 1
test = ds.Tables(0).Rows(i).Item("Nome")

If test = "Pippo" Then
DataGrid1.Select(i)
DataGrid1.SelectionBackColor = Color.Green
End If

If test = "Rossi" Then
DataGrid1.Select(i)
DataGrid1.SelectionBackColor = Color.Red
End If

If test = "Lucia" Then
DataGrid1.Select(i)
DataGrid1.SelectionBackColor = Color.Black
End If

Next

Ci sono due gorssi problemi:

1)Carica tutte le righe che soddisfano la condizione con l'ultimo colore che trova, quindi per
capirci "pippi" "rossi" "lucia" vengono colorate tutte di rosso, perchè rossi e l'ultimo record.

2)Appena click su una riga perde tutti i colori

Comunque la cosa che voglio ottenere forse non e chiara:
voglio ottenere delle righe di diverso colore in base al contenuto dei record.
Aspetto tuo aiuto, grazie tanto.

giulyxiano Profilo | Junior Member

La cosa si può migliorare ,ma a quanto ho capito tu vuoi un'altra cosa colorare il testo e mi sa che così non te ne esci perchè dovresti farti una classe ad hoc che sia un datagridtablestyle e cambiarlo ogni volta e adesso non posso aiutarti perchè sono impegnatissimo in un progetto. Comunque è ovvio che selezionandole le righe poi il colore se ne andava. Hai provato invece di cambiare il colore di fondo della riga a cambiare il testo cerca non usare BackColor ma se non ricordo mal ForeColor. Ciao
Greco Giuliano

basicdany Profilo | Expert

Ciao, pero almeno il fatto che prende solo l'ultimo colore, lo posso risolvere.
Almeno questa cosa perfevore.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5