如何修复交替和隐藏行的ASP GridView错误

时间:2014-02-20 22:04:08

标签: asp.net gridview webforms

我有一个网格,我为奇数行和偶数行指定行颜色:

    <asp:GridView ...>
        <RowStyle CssClass="oddRow" />
        <AlternatingRowStyle CssClass="evenRow" />
        ...
    </asp:GridView>

这看起来像这样:

enter image description here

注意第2行和第3行是如何相同的颜色。这是因为RowDataBound事件中的一些代码执行此操作:

If {some_condition} Then
  e.Row.Visible = False
End If

所发生的事情是第三行被隐藏了,但是网格正在使用evenRow样式呈现第2行和第4行,因为它们在隐藏第3行之前是偶数行 ,这就是颜色不交替的原因:

enter image description here

那么,有没有办法告诉GridView基于可见行而不是原始行渲染奇数/偶数样式?或者,首先必须重新架构所有内容以过滤数据,然后再绑定到网格? (我认为这将是更清晰的方法,但这是一些其他工作遗留代码,我试图以最小的中断修复错误。)

2 个答案:

答案 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>

我认为这对于所有场景都不够灵活,但这对我的情况来说已经足够了,所以我使用了这个,现在行颜色正确。