c# - GridView 分组行并更改颜色

标签 c# asp.net gridview

我使用带有父子网格 View 的可折叠 GridView。在子网格 View 中,我希望按日期对行进行分组(SQL 查询已经这样做了),然后根据组为每组行交替颜色。

        <asp:GridView ID="gvSites" runat="server" AutoGenerateColumns="false" CssClass="Grid"
    DataKeyNames="Location" OnRowDataBound="OnRowDataBound">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <img alt = "" style="cursor: pointer" src="images/plus.png" />
                <asp:Panel ID="pnlPetrols" runat="server" Style="display: none">
                    <asp:GridView ID="gvPetrols" runat="server" AutoGenerateColumns="false" CssClass = "ChildGrid">
                        <Columns>
                            <asp:BoundField ItemStyle-Width="150px" DataField="Date" HeaderText="Date------------------------" />
                            <asp:BoundField ItemStyle-Width="150px" DataField="PatrolNo" HeaderText="PatrolNo----------------" />
                            <asp:BoundField ItemStyle-Width="150px" DataField="ScansDue" HeaderText="ScansDue----------------" />
                            <asp:BoundField ItemStyle-Width="150px" DataField="Total" HeaderText="Total" />
                        </Columns>
                    </asp:GridView>
                </asp:Panel>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField ItemStyle-Width="150px" DataField="Location" HeaderText="Location" />

    </Columns>
</asp:GridView>

这是我得到的:
Date        PatrolNo    ScansDue   Total
07/22/2014  2           8          1
07/22/2014  4           8          1
07/22/2014  6           8          1
07/22/2014  7           8          1
07/23/2014  6           8          2
07/23/2014  7           8          1
07/23/2014  8           8          1

我希望 2014 年 7 月 22 日的所有记录都是一种颜色,而 2014 年 7 月 23 日的所有记录都是另一种颜色。

最佳答案

这适用于在您的组之间更改的样式。

设置一个全局变量来保存当前的 css 类,并为该行分组值。然后使用 RowDatabound实现交替行

//Global variables
string currentClass = "alternateDataRow";
string currentGroup = string.Empty;

protected void gvPetrols_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        //Get value from cell, you could also use DataKeys
        //We will assume 2 CSS classes "dataRow", "alternateDataRow"
        string rowGroup = e.Row.Cells[0].Text;

        //swap class if group value changes
        if (rowGroup != currentGroup)
        {
            currentClass = currentClass == "dataRow" ? "alternateDataRow" : "dataRow";
            currentGroup = rowGroup;
        }

        e.Row.CssClass = currentClass;

    }
}

现在你只需要创建你的两个 CSS 类。

关于c# - GridView 分组行并更改颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24933651/

相关文章:

c# - 在 LINQ to SQL 中执行 InsertOnSubmit 时出现 NullReferenceException

c# - 使用 WPF 数据绑定(bind)设计响应式 UI

c# - c#中的if返回语句

c# - 在 asp.net 视频上创建控件时出错

javascript - 从gridview将参数传递给javascript时服务器标记错误

asp.net - 从我的 GridView 行中取回对象

c# - 将 System.Drawing.Image 转换为 System.Windows.Media.ImageSource 没有结果

asp.net - Telerik Reporting 是否支持业务对象数据源?

javascript - aspx 会看不到 javascript 所做的更改吗?

c# - 如何在 RowDataBound 中为 GridView 使用模板字段项