我有一个网格,我为奇数行和偶数行指定行颜色:
<asp:GridView ...>
<RowStyle CssClass="oddRow" />
<AlternatingRowStyle CssClass="evenRow" />
...
</asp:GridView>
这看起来像这样:
注意第2行和第3行是如何相同的颜色。这是因为RowDataBound
事件中的一些代码执行此操作:
If {some_condition} Then
e.Row.Visible = False
End If
所发生的事情是第三行被隐藏了,但是网格正在使用evenRow
样式呈现第2行和第4行,因为它们在隐藏第3行之前是偶数行 ,这就是颜色不交替的原因:
那么,有没有办法告诉GridView基于可见行而不是原始行渲染奇数/偶数样式?或者,首先必须重新架构所有内容以过滤数据,然后再绑定到网格? (我认为这将是更清晰的方法,但这是一些其他工作遗留代码,我试图以最小的中断修复错误。)
答案 0 :(得分:1)
过滤数据很有意义。您要求网格了解哪些数据是真实的,哪些是假装的。不要让它看到过滤后的数据,并且没有问题。
答案 1 :(得分:1)
事实证明Grid正在使用SqlDataSource
,它内置了过滤功能。它看起来像这样:
<asp:SqlDataSource ...
FilterExpression="{0} = True OR ({0} = False AND Field1 = Value1 AND Field2 <> Value2)">
<SelectParameters>
...
</SelectParameters>
<FilterParameters>
<asp:ControlParameter ControlID="MyCheckBox" Name="ShowAll" PropertyName="Checked" DefaultValue="False" />
</FilterParameters>
</asp:SqlDataSource>
我认为这对于所有场景都不够灵活,但这对我的情况来说已经足够了,所以我使用了这个,现在行颜色正确。