Jag hittade ett trevligt script som gör att jag kan färga vissa celler i datagrid, beroende på cellens värd. Nu är jag ingen direkt expert på datagrid, men det troligast är väl att det inte är en int som returneras från GetColumnValueAtRow, d.v.s. att det t.ex. är en sträng. Tyvärr, jag fick massor av fel. Hej! Tack jag skall försöka. Detta ska nog lösa ditt problemHelt plötsligt fel i datagrid.
Har fungerat helt perfekt, tills idag då all skit kommer.
Så här ansluts scriptet:
<code>
aColumnTextColumn = new DataGridColoredTextBoxColumn();
aColumnTextColumn.HeaderText = ds1.Tables["frånPlaceringar"].Columns[i].ColumnName;
aColumnTextColumn.MappingName = ds1.Tables["frånPlaceringar"].Columns[i].ColumnName;
tableStyle.GridColumnStyles.Add(aColumnTextColumn);
</code>
För att inte behöva ta med hela scriptet så visar jag bara några aktuella rader:
<code>
protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
{
// the idea is to conditionally set the foreBrush and/or backbrush
// depending upon some crireria on the cell value
// Here, we color anything that begins with a letter higher than 'F'
try
{
object o = this.GetColumnValueAtRow(source, rowNum);
if( o!= null)
{
int c = ((int)o);
if( c == 0)
</code>
Vad som händer är att koden stannar och markera 'int c = ((int)o);'
På error medelandet står ung:
A first chanse exception of type 'System.InvalideCastExeption' occuret in SAW.exe
Additional Information : Specified cast is not valid.
Någon som har någon bra ide att lösa detta på?Sv: Helt plötsligt fel i datagrid.
Om man vill undvika att få ett run-time fel kan du göra som nedan. Det löser inte ditt problem men kan kanske hjälpa dig att förstå vad som går fel.
<code>
// Använd keyword as
int c = o as int;
// Om det inte är en int så returneras null, istället för att kasta exception
if( c == null )
{
throw new Exception("Värdet var ej en int, faktiskt datatyp är " + o.GetType().ToString());
}
</code>
/MattiasSv: Helt plötsligt fel i datagrid.
Kan man verkeligen använda 'as' i C#?Sv: Helt plötsligt fel i datagrid.
Prova använda följande kodsnutt:
<code>
if (o.GetType()==typeof(int))
{
// Rätt, Typecasta till int.
}
else
{
// Ajaj! Här var det inte rätt...
}
</code>
/andersSv: Helt plötsligt fel i datagrid.
Det som är underligt är att detta har fungerat en vecka nu, och helt plötsligt så kom felet.
Nu har jag försökt men...
<code>
if (o.GetType()==typeof(int))
{
// Rätt, Typecasta till int. ....han kommer ALDRIG hit
}
else
{
// Ajaj! Här var det inte rätt... han kommer ALLTID hit
}
</code>
Jag kan inte förstå att det helt plötsligt blir fel i ett annars fungerande script.
En annan sak, saker som tidigare har fungerat, fungerar inte alls längre, en massa underliga fel har uppståt.
Kan det vara ide att avinstallera och ominstallera?Sv: Helt plötsligt fel i datagrid.
Byt ut din:
int c = ((int)o);
mot:
int c = Int16.Parse(o.ToString());
/Fredrik N