Colorare dinamicamente le righe di un DataGridView

mercoledì 01 agosto 2012 - 09.24

pelling10 Profilo | Junior Member

Salve a tutti, sto sviluppando un semplice form in c# dove data una tabella db in cui ho 3 semplici campi nome cognome e colore, la form facendo una select in tabella sui campi mi riporta i dati in un controllo DataGridView.
Ora io vorrei che le righe del DataGridView si colorassero a seconda del nome colore contenuto nel campo colore del db come posso fare? Grazie in anticipo per le voste risposte/consigli.

Geronimo79 Profilo | Junior Member

Ciao, prova questo codice:

for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { if (GridView1.Rows(i).Cells(2).Value.ToString == "Verde") { GridView1.Item(2, i).Style.BackColor = Color.Green; } }

Facci sapere.
Un saluto.

pelling10 Profilo | Junior Member

Ok grazie!!!
Appena torno a casa lo provo e ti faccio sapere!!!
Grazie mille!!!

pelling10 Profilo | Junior Member

Ciaoho provato ad eseguire il codice:

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
{
if (dataGridView1.Rows[i].Cells[9].Value.ToString() != "")
{
dataGridView1.Item(2, i).Style.BackColor = Color.FromArgb(Convert.ToInt32(dataGridView1.Rows[i].Cells[9].Value.ToString()));
}
}

ma il compilatore mi da un errore: System.Windows.Forms.DataGridView' non contiene una definizione per 'Item'

Come posso risolvere?

Geronimo79 Profilo | Junior Member

Se hai Cells[9] devi fare così:
dataGridView1.Item(9, i).Style.BackColor = Color.FromArgb(Convert.ToInt32(dataGridView1.Rows[i].Cells[9].Value.ToString()));

Tu hai scritto:

dataGridView1.Item(2, i).......

Ovvio che ricevi l'errore.

Comunque il codice che ti ho riportato perchè l'hai modificato così??? Quello è perfetto per la tua situazione....

Facci sapere un saluto.

pelling10 Profilo | Junior Member

Scusami ancora ho provato a fare come mi hai detto tu........

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++)
{
if (dataGridView1.Rows[i].Cells[9].Value.ToString() != "")
{
dataGridView1.Item(9, i).Style.BackColor = Color.FromArgb(Convert.ToInt32(dataGridView1.Rows[i].Cells[9].Value.ToString()));
}
}

ma l' errore è sempre lo stesso: System.Windows.Forms.DataGridView1 non contiene una definizione per 'Item'

In poche parole sembra che .Item non ci sia come definizione per DataGridView1

Geronimo79 Profilo | Junior Member

Quello che inserisci tu non è il codice che ti ho fornito io....

Se devi colorare la cella non ho capito perchè usi:

dataGridView1.Item(9, i).Style.BackColor = Color.FromArgb(Convert.ToInt32(dataGridView1.Rows[i].Cells[9].Value.ToString()));

prova ad assegnarli un colore

GridView1.Item(9, i).Style.BackColor = Color.Green;

In quale evento del gridview devi inserire il codice?? Oppure sul load della pagina??

Facci sapere.
Un saluto.

pelling10 Profilo | Junior Member

Ti spiego meglio:

Il codice lo inserisco nella load dopo aver fatto la select in tabella.

Nella tabella che è strutturata con nome cognome e colore, nel campo colore io salvo il colore in formato Argb.

L'errore che viene generato non è sul valore che gli passo io ma è sul datagridview1.Item

Forse dovrei dichiararmi un oggetto di tipo datagridview cosa che ora non faccio?

Geronimo79 Profilo | Junior Member

Ho capito...posta il codice così vediamo il da farsi....

pelling10 Profilo | Junior Member

Credo di aver trovato l'errore..... Appena provo ti faccio sapere! Mille grazie!!!

Geronimo79 Profilo | Junior Member

OK.....

pelling10 Profilo | Junior Member

Ciao, anche se con notevole ritardo ti informo che il codice da te postatomi funziona perfettamente GRAZIE MILLE..... come sempre voi del forum siete imbattibili!!!!!

Geronimo79 Profilo | Junior Member

Ok perfetto...accetta la risposta così viene chiuo il thread...
Un saluto.

pelling10 Profilo | Junior Member

Ciao, scusami se ancora ti disturbo;
vorrei avere un altro tuo autorevole consiglio.
Ho sviluppato in C# 2005 un programmino Client Server in cui ho due tabelle:
1) TB_Utenti in cui ho i campi: Nome, Cognome, User, Psw
2) TB_Doc in cui ho Codice, Descrizione data ecc...
Il Software dopo l'accesso dell'utente con User e Psw mi mostra i dati della seconda tabella (TB_Doc) in un datagridview con il testo in grassetto;
quando l'utente fa click su uno dei record il campo viene visualizzato senza grassetto.
Io vorrei che quando l'utente esce dal software e rientra i record cliccati in precedenza continuino a vedersi senza grassetto mentre quelli non cliccati continuino a vedersi in grassetto; mentre entrando con un altro utente si vedano tutti in grassetto perchè o magari l'utente non è mai entrato o è entrato ma non ha cliccato nessun record.
Secondo te è fattibile come cosa?
Se si come posso fare?
Grazie in anticipo.

Geronimo79 Profilo | Junior Member

Bè tutto si può fare.... Potresti usare l'Application Setting dai uno sguardo quì:

http://vbcity.com/blogs/xtab/archive/2011/07/06/datagridview-saving-and-reusing-user-settings.aspx

http://www.ivanodibiasi.com/application-settings-in-vb-net.htm

http://www.dreamincode.net/forums/topic/121875-from-a-datagridview-to-mysettings/

http://www.dreamincode.net/forums/topic/72654-using-settings/

Facci sapere.
Un saluto.

pelling10 Profilo | Junior Member

Quindi.... correggimi se ho capito male, nell'application settings potrei salvarmi il codice di ogni singolo record che l'utente ha cliccato e poi alla nuova apertura confrontare il codice del datagridview con quello scritto nell'application settings..... se sono uguali rendo il testo normale altrimenti in grassetto.....

Geronimo79 Profilo | Junior Member

In linea di massima si, parliamo del primo esempio, quel codice in pratica va a settare alcune proprietà del gridview. Per esempio impostiamo una proprietà del gridview qualsiasi con il colore giallo e lo salviamo nell'application settings e poi lo richiamiamo via codice. Comunque è uno spunto per quello che ti serve. Fammi sapere se riesci altrimenti vediamo il da farsi.

pelling10 Profilo | Junior Member

OK grazie; io avevo pensato di salvare al click su ogni record del datagridview il codice del record in un file di testo; alla riapertura effettuavo un ciclo sul file confrontando ogni singolo codice con quelli presenti nel datagridview, se c'è corrispondenza allora quel record lo visualizzo normale altrimenti in grassetto..... che ne pensi?

Geronimo79 Profilo | Junior Member

Se ti è comodo così vai tranquillo....ti consiglio di operare con un file XML più che un file di testo....

pelling10 Profilo | Junior Member

OK GRAZIE!!!! appena riesco provo e ti faccio sapere..... grazie mille come sempre gentilissimo!!!!
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5