2010-01-06 46 views
0

我有一个棘手的小问题,我输出审计跟踪并需要突出显示每条记录的更改。基于先前记录的Asp.Net中继器格式项目

我目前使用Linq-to-Sql数据源将审计数据拉回来,然后使用可正常工作的中继器将其显示在表中。

问题是我需要改变一个单元格的背景颜色,如果它的值已经从前一个记录改变了,我正在努力寻找一种方法来做到这一点。

另一个我认为是简单地生成整个表,这将工作,但我只是觉得必须有一个更简单的方法来做到这一点。

有什么想法?

回答

0

必须玩之后我发现它是最快生成手动的HTML。

我在原始问题中忘记提及我必须将记录的顺序颠倒(即最近的第一个记录),因此在中继事件中记录样式变得更加困难,例如,添加第一条记录,其中具有颜色编码的单元格以指示更改,但此时下一条记录尚未写入,因此您没有任何可比较的记录。

最简单的方法似乎是循环遍历代码后面的记录,并将属性与属性进行比较,然后根据该属性创建样式。

谢谢大家花时间看问题并提出解决方案。

2

您可以使用ItemDataBound事件检查项目绑定时的值。此时,您可以根据前一个单元格检查该值,如果不同,请将CssClass添加到具有所需格式的文件中。

+0

我想过这样做,但遇到了如何在相应的单元格中的上一行检查值的问题。 关于如何做检查的任何建议? – Nathan 2010-01-06 21:39:16

+1

在过去,我已经能够访问ItemDataBound中的GridView对象,所以您真正需要的是找出当前的rowindex,然后比较GridView对象中的correpsonding行。尝试e.rowindex – 2010-01-06 22:14:06

0

选择数据项的集合并将其保存到具有受保护get属性的类变量中。数据项的集合需要被键入索引。然后在运行时将GridView绑定到数据项的集合。

那么你应该能够访问以前的项目在asp.net与标签类似

<%# this.DataItems[Container.DataItemIndex] == this.DataItems[Container.DataItemIndex] ? "same as previous item" : "different than previous item" %> 
0

在你的页面类创建一个域:

private int previousValue; 

然后在ItemCreated或ItemDataBound事件:

int currentValue = << get current value >>; 

if (previousValue != currentValue) { 
    << do highlight >>; 
    previousValue = currentValue; 
} 
1

我知道这是一个古老的问题,但对知识池有贡献,因为我也发现这个棘手。

声明性的解决办法是访问以前的DataListItem

((DataList)Container.Parent).Items[Container.ItemIndex-1] 

然而,不幸的是这DataItem属性似乎是空,因此您可以将以前的DataItem的不EVAL性质(例如与一个进行比较当前DataItem的属性)。

e。克这种不起作用:

<%# (DataBinder.Eval((((DataList)Container.Parent).Items[Container.ItemIndex-1]).DataItem, "SomeProperty")) == Eval("SomeProperty")) ? "SAME" : "DIFFERENT" %> 

但是,您可以使用ListItem.FindControl从以前的项目访问控制和访问控制内容。

(Eval("SomeProperty").ToString() == ((Label)(((DataList)Container.Parent).Items[Container.ItemIndex-1].FindControl("LabelBoundToSomeProperty"))).Text) ? "SAME" : "DIFFERENT" 

最后,疑难杂症 - 结合的第一个项目时,有没有以前的项目,所以你会得到一个索引越界异常。因此,你只需要首先检查你是不是在第一个项目。

把它全部togetehr给你一个最后的纯声明solultion:

<%# (Container.ItemIndex==0) ? "FIRST" : (Eval("SomeProperty").ToString() == ((Label)(((DataList)Container.Parent).Items[Container.ItemIndex-1].FindControl("LabelBoundToSomeProperty"))).Text) ? "SAME" : "DIFFERENT" %> 

上面会写出来,我们是否在第一个项目,或者在随后的项目所选择的属性是相同的或不同前一项中的该属性。

(附:首届SO提交 - 很长一段时间的读者,第一次作家:)

相关问题