如何按单元格颜色对gridview列进行排序?

时间:2016-07-18 23:38:40

标签: c# asp.net ajax gridview

我的visual studio 2015母版页面项目中有一个gridview。我通过Datatable在codebehind中填充gridview。 Datatable有4列,一列是Status(显示颜色RED,ORANGE和GREEN),具体取决于该字段的数据。

我每隔30秒设置一次计时器来刷新gridview(代码隐藏 - 数据加载功能)。我希望在status = RED ASC(顶部为红色)上按颜色对列进行排序。

我想找出实现这个想法的方法

我的aspx页面代码在

下面
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
  <div>&nbsp;</div>
  <asp:Timer ID="ctlTimer" runat="server" Interval="30000" OnTick="OnTimerIntervalElapse">
  </asp:Timer>
  <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
      <asp:Label ID="lblTimer" runat="server"></asp:Label>
    </ContentTemplate>
  </asp:UpdatePanel>
  <asp:UpdatePanel runat="server" ID="pnlUpdate" EnableViewState="False">
    <Triggers>
      <asp:AsyncPostBackTrigger ControlID="ctlTimer" EventName="Tick" />
    </Triggers>
    <ContentTemplate>
      <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound" Width="100%" AllowSorting="True"></asp:GridView>
    </ContentTemplate>
  </asp:UpdatePanel>
</asp:Content>​

我的代码 - 背后的代码。

     // create data table
    DataTable dt = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {
        // create columns
        dt.Columns.Add(new DataColumn("col1", typeof(string)));
        dt.Columns.Add(new DataColumn("Status", typeof(string)));
        dt.Columns.Add(new DataColumn("col3", typeof(string)));
        dt.Columns.Add(new DataColumn("col4", typeof(string)));

        //  get list of items to display
        getListofSystems(1);

        // clear datatable
        dt.Clear();
    }
    protected void GridView1_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            var statusValue = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Status"));
            if (statusValue == "Red")
            {
                e.Row.Cells[1].BackColor = Color.FromName("Red");
            }
            if (statusValue == "Orange")
            {
                e.Row.Cells[1].BackColor = Color.FromName("Orange");
            }
            if (statusValue == "Green")
            {
                e.Row.Cells[1].BackColor = Color.FromName("Green");
            }
        }
    }

    protected void OnTimerIntervalElapse(object sender, EventArgs e)
    {
        getListofSystems(1);
    }

将数据加载为下面的代码/逻辑。

 DataRow dr = dt.NewRow();

 // display system name
 dr["col1"] = ID;

// Get status from database
 switch (status)
 {
     case "red":
         dr["Status"] = "Red";
         break;
     case "orange":
         dr["Status"] = "Orange";
         break;
     case "green":
         dr["Status"] = "Green";
         break;
 }
 dr["col3"] = Datetime.Now;
 dr["col4"] = contact;

 // add row to datatable
 dt.Rows.Add(dr);

 // bind data to gridview
 GridView1.Visible = true;
 GridView1.DataSource = dt;
 GridView1.DataBind();

这几乎是所有代码。我已经删除了不必要的代码来填充上面的数据行。

1 个答案:

答案 0 :(得分:2)

使用int数据类型

添加列StatusWeight
// Get status from database
 switch (status)
 {
     case "red":
         dr["Status"] = "Red";
         dr["StatusWeight"] = 1;
         break;
     case "orange":
         dr["Status"] = "Orange";
         dr["StatusWeight"] = 2;
         break;
     case "green":
         dr["Status"] = "Green";
         dr["StatusWeight"] = 3;
         break;
 }

然后按StatusWeight列进行排序