2016-07-18 14 views
0

ビジュアルスタジオの2015マスターページのWebプロジェクトにgridviewがあります。私はDatatableを介してコードビハインドでgridviewを実装しています。また、Datatableには4つの列があり、1つの列にはそのフィールドのデータに応じてステータス(RED、ORANGEおよびGREENの色を表示)があります。グリッドビューの列をセルの色で並べ替える方法は?

私は、30秒ごとにグリッドビューを更新するためにタイマーを設定しました(コードの背後にある - データロード機能)。私は列がステータス=赤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(); 

これはほぼすべてのコードです。私は不要なコードを削除して上からデータ行を移入しました。

答えて

2

はその後ソートStatusWeight列

+0

によってカントは、任意の複数の列を追加する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を追加します。それを行う他の方法はありますか?この列を非表示にして、ソートを使用する方法がいくつかできると思いますか? – Jag

+0

はい、StatusWeightを非表示の列にしてもそれを並べ替えることができます。バインドする前にクエリまたはデータテーブルで並べ替えてください。 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

関連する問題