2016-07-18 5 views
0

У меня есть сетчатое изображение в моей мастерской веб-проекта visual studio 2015. Я заполняю gridview в codebehind через Datatable. И Datatable имеют 4 столбца, а один столбец - Status (отображает цвета RED, ORANGE и GREEN) в зависимости от данных для этого поля.Как сортировать столбец сетки по цвету ячейки?

Я установил таймер каждые 30 секунд, чтобы обновить сетку (код позади - функция загрузки данных). Я хочу, чтобы столбец был отсортирован по цвету по статусу = 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>​ 

Моей код-Behind коды.

 // 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(); 

Это почти весь код. Я удалил ненужный код, чтобы заполнить строки данных сверху.

ответ

2

добавить столбец StatusWeight с типом данных INT

// 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

+0

Брус добавить больше столбцов. Есть ли другой способ сделать это? Как вы думаете, я могу как-то скрыть эту колонку и все еще использовать сортировку по ней? – Jag

+0

да, вы можете сделать StatusWeight скрытым столбцом и по-прежнему сортировать его. Просто соберите его в запросе или datatable, прежде чем связывать. https://msdn.microsoft.com/en-us/library/bb383893(v=vs.90).aspx http://stackoverflow.com/questions/9107916/sorting-rows-in-a-data-table – Muckeypuck

+0

Обе ссылки предназначены для datagridview, которые не работают. они устарели. – Jag