【问题标题】:How to sort gridview column by cell colour?如何按单元格颜色对gridview列进行排序?
【发布时间】:2016-11-21 16:42:15
【问题描述】:

我的 Visual Studio 2015 母版页 Web 项目中有一个 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();

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

【问题讨论】:

    标签: c# asp.net ajax gridview


    【解决方案1】:

    添加具有 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列排序

    【讨论】:

    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 2013-03-18
    • 2012-12-15
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多