Newsgroup: it.comp.lang.visual-basic
Titolo: [C#] Colorare in modo diverso solo alcune celle di una DataGridView

Ciao,
avrei la necessita di colorare diversamente alcune celle di un
DataGridView in base a delle condizioni.In pratica ho un tabella nelle
cui celle ci sono dei dati numerici e dovrei fare in modo che in base
a delle condizioni, alcune di queste celle abbiano un colore di sfondo
diverso dalle altre!!Come posso fare?
Grazie
Nicola
P.s.
Ma un NG specifico per C# non c'è?

 Ma un NG specifico per C# non c'è?
microsoft.public.it.dotnet.csharp
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 DataGridView in base a delle condizioni.
Molte caratteristiche di una cella sono controllato dalla classe 
DataGridViewCellStyle:
 
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcellstyle.aspx
In sostanza avrai una cosa del tipo:
DataGridView1.Item(indiceColonna, indiceRiga).Style.BackColor = Color
-- 
S.

 S.
Grazie 1000 ad entrambi!!!
Nicola

 > DataGridView1.Item(indiceColonna, indiceRiga).Style.BackColor = Color
Scusa, ma io questo metodo , DataGridView1.Item( ....) non l'ho!!!
Io uso .NET 2.0
Grazie ancora
Nicola


Perdona il ritardo, sono appena tornato da Grosseto (maledetta l'A1 e 
chi la concepì).
Item non è un metodo in senso stretto, è una proprietà che espone le 
celle di un DataGridView sotto forma della classe DataGridViewCell. Ci 
sono due overload, ad uno puoi dare in pasto una stringa rappresentante 
il nome di una colonna e l'indice in base zero della riga, all'altro dai 
sia l'indice della colonna che quello della riga.
Lo DEVI avere, non ci sono santi  :)
E adesso vado a farmi una birra, che tanto domani qui da noi è festa  :P
-- 
S.


Per il ritardo ....... figurati.Sono io che ringrazio te per la
risposta.
Perdonami ancora, ma un pò perche sono duro di comprensorio :(   ed un
pò perchè  ora mi sto avvicinando a questo
linguaggio, non sono riuscito  ...... nemmeno a partire visto che non
sò nemmo dove inserire il codice :(.
Ti posto il codice del metodo che visualizza la tabella e che viene
richiamato da una voce di menu :
private void FormVisualizzaDati_Load(object sender, EventArgs e)
      {
            DataTable dt = new DataTable();
            OleDbConnection con = new OleDbConnection();
            string sConn = "Provider=Microsoft.Jet.OLEDB.4.0; " +
"Datasource=C:\\Prove\\Lista.mdb";
            string SQL = "Select ...... ";
            con.ConnectionString = sConn;
            OleDbCommand com = new OleDbCommand(SQL, con);
            OleDbDataAdapter da = new OleDbDataAdapter();
            da.SelectCommand = com;
            da.Fill(dt);
            dataGridView1.DataSource = dt;
      }
Perdonami ......
Grazie ancora
Nicola

       }
Scusami, non avevo più seguito il ng, quindi non avevo più visto la tua 
risposta.
Ti riporto sotto del codice che ho appena scritto (in VB anche se il tou 
è in C#, dal momento che questo è un ng di VB ;) )
Supponiamo che tu abbia una datagridview che mostra una datatable con 
una sola colonna (la quale - indovina un po' -  si chiama "colonna"), 
che ospita i numeri da 0 a 10.
Se vuoi che, ad esempio, lo sfondo delle celle che contengono un numero 
pari diventi nero e che il testo diventi arancione, scriverai del codice 
simile a quello seguente:
Dim c As New DataGridViewCellStyle()
c.BackColor = Color.Black
c.ForeColor = Color.Orange
For Each r As DataGridViewRow In DataGridView1.Rows
	If (Convert.ToInt32(r.Cells("colonna").Value) Mod 2 = 0) Then
		r.Cells("colonna").Style = c
	End If
Next
-- 
S.

 - Mostra testo citato -
Grazie ancora...... ora mi è piu chiaro il da farsi solo che in c#
credo non sia
possibile fare r.Cells poichè il tools di sviluppo mi dice che Cells è
una proprietà e non un metodo.
Ho provato su internet uno dei vari servizi che permettono in
automatico la conversione del codice scritto in VB a c# e tutti  mi
hanno dato questo risultato :
 DataGridViewCellStyle c = new DataGridViewCellStyle();
    c.BackColor = Color.Black;
    c.ForeColor = Color.Orange;
    foreach (DataGridViewRow r in DataGridView1.Rows) {
        if ((Convert.ToInt32(r.Cells("colonna").Value) % 2 == 0)) {
            r.Cells("colonna").Style = c;
        }
    }
solo che una volta messo questo codice Visual C# express mi da quel
tipo di errore!!!!
Come potrei "aggirare" la cosa?
Infinitamente grazie
Nicola

 Come potrei "aggirare" la cosa?
Cambiando servizio di traduzione del codice  ;)
E' un errore piuttosto grave per un tool di conversione.
Quando hai a che fare con indici o chiavi, nei linguaggi aventi sintassi 
C-like devi usare le parentesi quadre, non le tonde.
Quindi la traduzione corretta (riporto solo il pezzo interessato) č:
	r.Cells["colonna"].Value
Ti consiglierei perņ di studiare un po' la sintassi di C# prima di 
preoccuparti del colore delle celle. E' un piccolo sbattimento in 
confronto alla quantitą di tempo che ti farą risparmiare su cose come 
questa.
Naturalmente senza offesa eh!  :))
-- 
S.

 S.
Ti ringrazio ancora, ora il codice non va in errore ma nonostante ciò,
le celle non si colorano!!!!!
Devo per caso impostare qualche proprieta del DataGridView?
Riguardo alla sintassi di c# hai perfettamente ragione,e non mi
offendo assolutamente visto che sto cercando di imparare,solo che nei
manuali e tutorial a mia disposizione e che ho letto non si parla di
questa cosa ma di cicli,variabili ecc. ecc, forse perchè sta cosa è un
pò più avanzata o forse pensano che nessuno abbia questa necessita?
Grazie, come sempre
Nicola

 pň piů avanzata o forse pensano che nessuno abbia questa necessita?
No no, il fatto di utilizzare le parentesi quadre č tutt'altro che 
avanzato... basti pensare che, anche per creare ed utilizzare un 
semplice array, devi fare uso delle quadre. Direi che č un particolare 
fondamentale della sintassi.
Un tutorial che, cosě ad una prima occhiata, mi pare ben fatto, č:
 
http://www.softsteel.co.uk/tutorials/cSharp/contents.html
E' in inglese, ma a quanto vedo non ci sono tutorial italiani veramente 
ben fatti. Forse la documentazione Microsoft italiana puň aiutarti, in 
particolare qui mi pare che C# sia trattato nel dettaglio:
 
http://msdn.microsoft.com/it-it/library/kx37x362(VS.80).aspx
-- 
S.

 S.
Troppo buono!!! La mia mail è 
cut...@libero.it
.
Cmq questo è il codice con le  modifiche che mi hai indicato nel
precedente post:
 private void FormVisualizzaLista_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            System.Data.OleDb.OleDbConnection con = new
System.Data.OleDb.OleDbConnection();
            string sConn = "Provider=Microsoft.Jet.OLEDB.4.0; " +
"Data source=C:\\Prove\\Lista.mdb";
            string SQL = "select  articolo,descrizione,n_pezzi,costo
from lista order by id desc";
            con.ConnectionString = sConn;
            System.Data.OleDb.OleDbCommand com = new
System.Data.OleDb.OleDbCommand(SQL, con);
            System.Data.OleDb.OleDbDataAdapter da = new
System.Data.OleDb.OleDbDataAdapter();
            da.SelectCommand = com;
            da.Fill(dt);
            dataGridView.DataSource = dt;
            //Disegno delle celle by Stevie
            DataGridViewCellStyle c = new DataGridViewCellStyle();
            c.BackColor = Color.Black;
            c.ForeColor = Color.Green;
            foreach (DataGridViewRow r in dataGridView.Rows)
            {
                if ((Convert.ToInt32(r.Cells["n_pezzi"].Value) % 2 ==
0))
                {
                    r.Cells["n_pezzi"].Style = c;
                }
            }
        }
Così facendo la colonna n_pezzi che contiene un valore numerico pari
dovrebbe presentarsi con il colore di sfondo nero e la scritta verde
ed invece ...... nulla.
Nik