我有一个棘手的小问题,我输出审计跟踪并需要突出显示每条记录的更改。基于先前记录的Asp.Net中继器格式项目
我目前使用Linq-to-Sql数据源将审计数据拉回来,然后使用可正常工作的中继器将其显示在表中。
问题是我需要改变一个单元格的背景颜色,如果它的值已经从前一个记录改变了,我正在努力寻找一种方法来做到这一点。
另一个我认为是简单地生成整个表,这将工作,但我只是觉得必须有一个更简单的方法来做到这一点。
有什么想法?
我有一个棘手的小问题,我输出审计跟踪并需要突出显示每条记录的更改。基于先前记录的Asp.Net中继器格式项目
我目前使用Linq-to-Sql数据源将审计数据拉回来,然后使用可正常工作的中继器将其显示在表中。
问题是我需要改变一个单元格的背景颜色,如果它的值已经从前一个记录改变了,我正在努力寻找一种方法来做到这一点。
另一个我认为是简单地生成整个表,这将工作,但我只是觉得必须有一个更简单的方法来做到这一点。
有什么想法?
必须玩之后我发现它是最快生成手动的HTML。
我在原始问题中忘记提及我必须将记录的顺序颠倒(即最近的第一个记录),因此在中继事件中记录样式变得更加困难,例如,添加第一条记录,其中的具有颜色编码的单元格以指示更改,但此时下一条记录尚未写入,因此您没有任何可比较的记录。
最简单的方法似乎是循环遍历代码后面的记录,并将属性与属性进行比较,然后根据该属性创建样式。
谢谢大家花时间看问题并提出解决方案。
您可以使用ItemDataBound
事件检查项目绑定时的值。此时,您可以根据前一个单元格检查该值,如果不同,请将CssClass
添加到具有所需格式的文件中。
选择数据项的集合并将其保存到具有受保护get属性的类变量中。数据项的集合需要被键入索引。然后在运行时将GridView绑定到数据项的集合。
那么你应该能够访问以前的项目在asp.net与标签类似
<%# this.DataItems[Container.DataItemIndex] == this.DataItems[Container.DataItemIndex] ? "same as previous item" : "different than previous item" %>
在你的页面类创建一个域:
private int previousValue;
然后在ItemCreated或ItemDataBound事件:
int currentValue = << get current value >>;
if (previousValue != currentValue) {
<< do highlight >>;
previousValue = currentValue;
}
我知道这是一个古老的问题,但对知识池有贡献,因为我也发现这个棘手。
声明性的解决办法是访问以前的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提交 - 很长一段时间的读者,第一次作家:)
我想过这样做,但遇到了如何在相应的单元格中的上一行检查值的问题。 关于如何做检查的任何建议? – Nathan 2010-01-06 21:39:16
在过去,我已经能够访问ItemDataBound中的GridView对象,所以您真正需要的是找出当前的rowindex,然后比较GridView对象中的correpsonding行。尝试e.rowindex – 2010-01-06 22:14:06