读书人

请问DataGrid超标数据,设置成红色有关

发布时间: 2012-01-26 19:40:46 作者: rapoo

请教DataGrid超标数据,设置成红色问题
请朋友们看一下这个代码有什么问题.
以下代码的功能是:把超标的数据设置成红色.
private static double[,] markValues = new double[20,2];//保存各个指标的上限和下了限.
private static string[] markTips = new string[20];//保存各个指标的上限和下了限及参数的名称,做为一个各个指标的提示.
markValues,markTips 中的值在页面第一次加载时赋值.

以下是查出数据时执行的代码.

foreach(DataGridItem item in DG_PAGE.Items)
{
if(item.ItemType == ListItemType.Item || item.ItemType == ListItemType.AlternatingItem)
{
Label[] labels = new Label[20];
labels[0] = (Label)item.FindControl( "ii_rt ");
labels[1] = (Label)item.FindControl( "ii_yt ");
labels[2] = (Label)item.FindControl( "ii_rhumidity ");
labels[3] = (Label)item.FindControl( "ii_yhumidity ");
labels[4] = (Label)item.FindControl( "ii_rvt ");
labels[5] = (Label)item.FindControl( "ii_yvt ");
labels[6] = (Label)item.FindControl( "ii_r2vt ");
labels[7] = (Label)item.FindControl( "ii_y2vt ");
labels[8] = (Label)item.FindControl( "ii_r1t ");
labels[9] = (Label)item.FindControl( "ii_r2t ");
labels[10] = (Label)item.FindControl( "ii_y1t ");
labels[11] = (Label)item.FindControl( "ii_y2t ");


labels[12] = (Label)item.FindControl( "ii_r1p ");
labels[13] = (Label)item.FindControl( "ii_r2p ");
labels[14] = (Label)item.FindControl( "ii_y1p ");
labels[15] = (Label)item.FindControl( "ii_y2p ");
labels[16] = (Label)item.FindControl( "ii_r1h ");
labels[17] = (Label)item.FindControl( "ii_r2h ");
labels[18] = (Label)item.FindControl( "ii_y1h ");
labels[19] = (Label)item.FindControl( "ii_y2h ");
for(int i=0;i <labels.Length;i++)
{
double realValue = Convert.ToDouble(labels[i].Text);
if(realValue < markValues[i,0] || realValue > markValues[i,1])
{
labels[i].CssClass = "RedFont ";
}
labels[i].Attributes.Add( "title ",markTips[i]);
}


}

存在的问题是:
1.在我的电脑和公司的其它的几台电脑上是正常的,可以看到超标的数据是红色.
2.同样的代码在客户的电脑上,显示的效果是有的超标数据是黑色,有的未超标数据是红色,并且是不规则的,一般来说红色是成片出现的,也就是显示颜色不正常的不是一两个数据,而是一片数据都是显示红色,其实这些数据未超标或只有一两个超标.

想请教一下这样的问题可能是什么原因?


[解决办法]
有可能是static变量的问题,debug跟踪一下,看看输出的值是什么

其实可以采取绑定来设置item的颜色。
[解决办法]
ref:
http://topic.csdn.net/t/20050817/08/4213082.html
[解决办法]
很可能是static并发引起的.

测试步骤如下:
1.先不使用static,每次使用都重新赋值,看问题是否还存在,如果正常了,可以确认是static造成.
solution:
a:每次使用该static数组时 lock{}起来.

[解决办法]
B/S系统一定要谨慎使用static,一般来说只有对于每个client每个时刻都使用的恒定值时才使用.


读书人网 >C#

热点推荐