根据行的前景色对网格视图进行排序

本文关键字:视图 网格 排序 前景色 | 更新日期: 2023-09-27 18:30:00

我有一个网格视图。

我正在根据行命令事件中的逻辑,将网格视图中某些行的颜色更改为红色。

现在我想对网格视图进行排序,使彩色行显示在网格视图的顶部。有什么办法我能做到吗?我的代码如下:

aspx:

<asp:GridView ID="gvMain" runat="server" ShowFooter="true"OnRowCommand="gvMain_RowCommand">
                                <Columns>
                                 <HeaderStyle Width="15%"></HeaderStyle>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Std" SortExpression="Std" >
                                    <ItemTemplate>
                  <asp:Label ID="lblStd" runat="server" Text='<%#Eval("Std") %>'></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
        <asp:DropDownList Width="200" runat="server"  id="cboStd" Font-Size="7pt" Height="12pt">
                                    </asp:DropDownList>                                         
                                    </EditItemTemplate>
                                </asp:TemplateField>
                   <asp:TemplateField HeaderText="Dept" SortExpression="Dept" >
                                    <ItemTemplate>
        <asp:Label ID="lblDept" runat="server" Text='<%#Eval("Dept") %>'></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
      <asp:DropDownList Width="100" runat="server"  id="cboDept" Font-Size="7pt" Height="12pt">
                                    </asp:DropDownList>                                       
                                    </EditItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                               </asp:GridView>

aspx.cs

protected void gvMain_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                List<StdMap> lstStd = null;
                if (gvMain.EditIndex == e.Row.RowIndex)
                {
                    lstStd = Service.GetDetails();
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    lstStd = Service.GetDetails();                    
                    ReportMap row = ((ReportMap)e.Row.DataItem);
                    if ("condition to change color to red ")
                    {
                        e.Row.Cells[1].ForeColor = System.Drawing.Color.Red;
                    }
                    else
                    {
                    }
                    row = null;
                }
            }
            catch (Exception ex)
            {
            }
        }

我应该怎么做才能让所有带有正色红色的行出现在网格视图的顶部?

根据行的前景色对网格视图进行排序

也许您可以在数据绑定之前订购网格。。。

有点像:

var Datasource = GetDataSource();
var OrderedDataSource = DataSource.OrderBy(Data => ConditionToChangeColorToRed(Data) ? 0 : 1);
gvMain.DataSource = OrderedDataSource;
gvMain.DataBind();