我看到论坛中有询问关于如何在gridview随某行某列值的改变时(这些值是空的或不是空的或是其它某些值等),其背景色及文本颜色也随之改变。这篇文章便论述这个问题。
根据某列的值改变其样式最好的方法是在gridview的datarowbound事件中想办法。在gridview中的行绑定数据后将立即执行datarowbound事件。datarowbound事件使用gridviewroweventargs类作为事件变量。通过事件变量你能够利用gridviewroweventargs属性操作已经绑定数据的行。
protected void gridview1_rowdatabound(object sender, gridviewroweventargs e) { gridviewrow row = e.row; } |
row将返回tablerow类中的一个gridviewrow对象。
绑定的row有几种不同的类型。例如:datarow, emptydatarow, footer, header, pager 和 separator。通过gridview的rowtype属性可以得到当前行的行类型。rowtype是一组datacontrolrow枚举。
看下面的代码示例,检测gridview列出的行是否为一个标准类型的行。
protected void gridview1_rowdatabound(object sender, gridviewroweventargs e) { if (e.row.rowtype == datacontrolrowtype.datarow) { //do something! } } |
可以使用row的cells属性得到其cells,它将返回一个tablecellcollection对象。然后通过tablecellcollection索引得到特定的cells。tablecellcollection索引将返回一个tabelcell对象,对应于row中的一个cell:
protected void gridview1_rowdatabound(object sender, gridviewroweventargs e) { if (e.row.rowtype == datacontrolrowtype.datarow) { string value = e.row.cells[0].text; } } |
现在你已经明白了如何得到gridview中某行某列的值,那么根据值的变化改变其样式就比较容易了。以下示例使用 northwind 数据库,通过检测第四列(unitprice)的值是否大于10将其颜色改变为红色。
<%@ page language=”c#”%> <%@ import namespace=”system.drawing” %> <!doctype html public “-//w3c//dtd xhtml 1.1//en” “http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd”> <script runat=”server”> </script> connectionstring=”<%$ connectionstrings:appconnectionstring1 %>” /> </div> |