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

时间:2014-11-10 22:48:37

标签: c# asp.net gridview

我有一个网格视图。

我基于行命令事件中的逻辑在gridview中将某些行的颜色更改为红色。

现在我想对网格视图进行排序,使得彩色行显示在网格视图的顶部。 我有什么方法可以做到这一点。 ?我的代码如下:

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)
            {

            }
        }

如何让所有带有forecolor红色的行显示在网格视图的顶部?

1 个答案:

答案 0 :(得分:0)

也许你可以在数据绑定之前订购你的网格......

某种类似的东西:

var Datasource = GetDataSource();

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

gvMain.DataSource = OrderedDataSource;
gvMain.DataBind();