DataGrid AlternatingItemStyle在e.Item.Visible = False之后

时间:2011-06-21 21:00:05

标签: .net asp.net vb.net

我们有一个ItemCommand使DataGridItem不可见。这打破了我们应用的交替配色方案。有没有办法重新应用样式而不重新绑定或手动设置每个DataGridItem的BackColor属性?

2 个答案:

答案 0 :(得分:1)

没有任何东西可以自动修复不可见项目上的AlternatingItemStyle,无论是DataGrid还是GridView(据我所知)。

因此您可以手动修复它,例如以下列方式:

Private visibleRowIndex As Int32 = -1
Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        hide/show the GridViewRow according to your business-logic'
        If e.Row.Visible Then
            visibleRowIndex += 1
            e.Row.CssClass = If(visibleRowIndex Mod 2 = 0, "GridRowStyle", "GridAlternatingRowStyle")
        End If
    End If
End Sub

编辑:我忘记你正在使用DataGrid:

Private visibleRowIndex As Int32 = -1
Protected Sub DataGridItem_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles GridView1.RowDataBound
    If e.Item.ItemType = ListItemType.Item OrElse _
         e.Item.ItemType = ListItemType.AlternatingItem Then
        'show/hide the DataGridItem according to your business-logic'
        If e.Item.Visible Then
            visibleRowIndex += 1
            e.Item.CssClass = If(visibleRowIndex Mod 2 = 0, "GridRowStyle", "GridAlternatingRowStyle")
        End If
    End If
End Sub

答案 1 :(得分:1)

好吧,这完全是黑客攻击,但由于你似乎只关注BackColor,我可能完全抛弃交替的项目风格,并创建一个有两种颜色的图像,一种颜色在另一种颜色的顶部。将其设置为水平拉伸并垂直重复作为网格本身的背景。由于您可以控制项目的高度,因此只需使用正确高度的线条创建图像即可。

总的来说,我知道,但是它在100%的时间内都能正常工作并且在渲染方面非常快速。