PDA

View Full Version : [C#] Formattazione Condizionale


webgandalf
28-04-2007, 08:39
Qualcuno sa come applicare la formattazione condizionale in un datagridview ?

Grazie Mille in anticipo

RaouL_BennetH
28-04-2007, 12:37
Devi utilizzare gli eventi CellParsing e CellFormatting.

Se non definisci un DefaultCellStyle di base, in quei due eventi dovrai scrivere molte righe di codice.

Ti faccio un esempio:


//supponiamo di avere una griglia nella quale per ogni cella al
//valore inserito dall'utente voglio aggiungere .00 se l'utente inserisce un numero intero
//per esempio inserisce: 5 e quando lascia la cella il risultato deve diventare: 5.00


private void miaGridView_CellParsing(object sender, DataGridViewCellParsingEvent e)
{
for(int count = minValoreColonne; count < maxValoreColonne; count++)
{
if(miaGridView.Columns[e.ColumnIndex].Index == count)
{
if(e != null)
{
if(e.Value != null)
{
try
{
e.Value = Int32.Parse(e.Value.ToString()).ToString("N2").Replace(",",".");
e.ParsingApplied = true;
}
catch(FormatException)
{
e.ParsingApplied = false;
}
//.....

}


Questo può darti spunto solo per un tipo di valore, da abbinare all'evento CellFormatting


//per esempio voglio formattare il valore come data e ora breve:

private void miaGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DateTime myDate;
try
{
for(int count = minValoreColonne; count < maxValoreColonne; count++)
{
if(e.Value != null && e.ColumnIndex == count)
{
if(DateTime.TryParse(e.Value.ToString(), out myDate))
{
e.Value = myDate.ToShortTimeString();
e.FormattingApplied = true;
}
}
}
}
catch(FormatException ex)
{
MessageBox.Show("Formato non corretto");
e.FormattingApplied = false;
}
}

webgandalf
02-05-2007, 09:50
Grazie Mille ,
Adesso provo :)

webgandalf
02-05-2007, 10:06
Ho visto ma io intendevo proprio una formattazione condizionale ( come quella di Excel per capirsi )

Ad esempio : Se il valore nella cella è minore di 1 colora di rosso , se è uguale di giallo se è maggiore di verde .
Dal report designer sono riuscito a farlo senza problemi ma nel datagridview non riesco proprio .

RaouL_BennetH
02-05-2007, 11:57
allora ti basta (sempre in quegli eventi) definire un metodo che faccia qualcosa tipo:



for(int i = min; i < max; i++)
{
if(datagridview.Rows[r].Cells[i].Value < 1)
{
datagridview.Rows[r].DefaultCellStyle.BackColor = Color.Red;
}
}



ovviamente è un esempio per un solo caso, ma puoi costruirtelo come più ti serve.