Hjælp til override Paint metode
Hejsa...Jeg er ved at gøre således, så div. celler i mit datagrid bliver farve alt efter hvilken værdi de indeholder..det er dog KUN den tredie kolonne hvis celler som evt. skal farves....HVER celle's indhold sammenlignes med med en bestemt værdi fra gui'en af...( nogle textboxe i formen)...(derfor modtager min UcerControl en MicrosForm ref...)
Jeg kan godt få det til at virke, hvis jeg laver et SIMPELT tjek for ALLE cellerne i datagriddet. Fx. hvis deres værdi er højere end 5, så skal baggrunden i cellen farves rød - ellers hvid...men når jeg laver det lidt mere advanceret, så farver den ikke længere cellerne korrekt...har prøvet er debugge, og der ser det ud til at den gøre det rigtige...Men når formen så kører, er det hele alligevel farvet hvidt...?
Jeg kan få fat i række nummeret på den aktuelle celle som bliver tegnet i mit datagrid...men jeg ved ikke hvordan jeg får fat i den aktuelle kolonne? Lige nu itererer jeg igennem kolonner på min egen alternative måde og det er åbenbart det som af en eller anden grund ikke virker korrekt...? Ved i hvordan jeg får fat i den aktuelle kolonne, eller koordinatet på den aktuelle celle, som bliver tegnet, ville selvfølgelig være lige så godt :)
Min UserControl ser således ud....
public class DataGridColumColor : DataGridTextBoxColumn
{
MicrosForm mf1;
public DataGridColumColor(PropertyDescriptor pcol, MicrosForm mf)
{
mf1=mf;
}
protected override void Paint(Graphics g,Rectangle Bounds,CurrencyManager Source,int RowNum, Brush BackBrush ,Brush ForeBrush ,bool AlignToRight)
{
string tekst = "";
double værdi = 0;
bool farvelægCelle = false;
if(RowNum==2)
{
for(int i=0; i<5; i++)
{
farvelægCelle = false;
tekst = mf1.udDataGridReproducerbarCvSdMv[2,i].ToString();
værdi = Double.Parse(tekst.Replace(".",","));
if(i==0)
{
if(værdi>Double.Parse(mf1.textBoxIndstillingerReproCRP.Text))
farvelægCelle = true;
}
else if(i==1)
{
if(værdi>Double.Parse(mf1.textBoxIndstillingerReproGRAa.Text))
farvelægCelle = true;
}
else if(i==2)
{
if(værdi>Double.Parse(mf1.textBoxIndstillingerReproGRAp.Text))
farvelægCelle = true;
}
else if(i==3)
{
if(værdi>Double.Parse(mf1.textBoxIndstillingerReproHGB.Text))
farvelægCelle = true;
}
else //if(i==4)
{
if(værdi>Double.Parse(mf1.textBoxIndstillingerReproHCT.Text))
farvelægCelle = true;
}
//Teksten i den aktuelle celle
string cellVærdi = GetColumnValueAtRow(Source, RowNum).ToString();
if(farvelægCelle)
{
//Sætter bagggrundsfaven
BackBrush = Brushes.Red;
}
else
BackBrush = Brushes.White;
//Farver cellen
g.FillRectangle(BackBrush, Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height);
//Opretter en font
System.Drawing.Font font = new Font("Arial", (float)8.25 );
//Tegner teksten på overpå igen :)
g.DrawString(cellVærdi,font ,Brushes.Black ,Bounds.X ,Bounds.Y );
}
}
else
{
//Teksten i den aktuelle celle
string cellVærdi = GetColumnValueAtRow(Source, RowNum).ToString();
BackBrush = Brushes.White;
//Farver cellen
g.FillRectangle(BackBrush, Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height);
//Opretter en font
System.Drawing.Font font = new Font("Arial", (float)8.25 );
//Tegner teksten på overpå igen :)
g.DrawString(cellVærdi,font ,Brushes.Black ,Bounds.X ,Bounds.Y );
}
}
}
Håber meget på i kan hjælpe mig!!
Mvh. PabloPablo
