1. Keep your old array of values
2. Read your new array of values
3. Extend your LINQ query to compare the two
4. Use the PaintCell event of the grid to look at the '...Changed' boolean to change backgroundcolor etc.
string[][] origArr =
{
new [] {"A", "B", "C"},
new [] {"D", "E", "F"},
new [] {"G", "H", "I"}
};
string[][] newArr =
{
new [] {"A", "B", "C"},
new [] {"D", "X", "F"},
new [] {"G", "H", "K"}
};
var datasource = (from arrOld in origArr
from arrNew in newArr
select new
{
First = arrOld[0],
FirstChanged = arrNew[0] != arrOld[0],
Second = arrOld[1],
SecondChanged = arrNew[1] != arrOld[1],
Third = arrOld[2],
ThirdChanged = arrNew[2] != arrOld[2]
});