2015-07-21 16 views
6

Ich möchte die Farbe der Grdiview-Zelle basierend auf Zustand ändern und die Bedingung ist, wenn Passport in einem Monat abläuft oder wenn es bereits abgelaufen ist, so will ich um beide Bedingungen zu überprüfen, wenn es abläuft oder wenn es bereits abgelaufen ist, möchte ich die Farbe in rot ändern.Wie Gridview Zellfarbe basierend auf Bedingung ändern mit C#

dank
protected void OnRowDataBound_gvPass(object sender, GridViewRowEventArgs e) 
    { 
     DateTime todaysDate = DateTime.Now.Date; 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 


     Label lblPassportExpDate = (Label)e.Row.FindControl("PassportExpDate"); 
     DateTime PassportExpDateDate = DateTime.Parse(lblPassportExpDate.Text); 
     if (PassportExpDateDate < DateTime.Today || PassportExpDateDate < todaysDate.AddDays(30)) 
     { 
      //e.Row.BackColor = System.Drawing.Color.Red; 
      gvDriverStatus.Columns[3].ItemStyle.ForeColor = System.Drawing.Color.Red; 
     } 

     } 
    } 
+0

Kontrolle dieses http://stackoverflow.com/questions/4427848/change-cell-color-on-different-values-gridview –

+0

ich habe eine ähnliche Logik, funktioniert aber immer noch nicht für mich – moe

+0

siehe diesen Artikel, http://codepedia.info/2015/04/gridview-row -color-change-based-on-data-asp-net-c/Sie können mit 'e.Row.Cell [3] .CssClass = setColorClass;' –

Antwort

7

Hier ist ein vereinfachtes Stück Code, der für mich gearbeitet und man konnte leicht für Ihren Fall anpassen:

protected void Page_Load(object sender, EventArgs e) 
{ 
    refDate = new DateTime(1996, 7, 15); 
} 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowIndex >= 0) 
    { 
     if (DateTime.Parse(e.Row.Cells[3].Text) < refDate) 
     { 
      e.Row.Cells[3].BackColor = Color.Red; 
     } 
    } 
} 

Dies ist das Ergebnis i erhalten:

enter image description here

Hinweis: Ich verwende eine fest codierte refDate vom 15.07.1996, also ist es sinnvoll mit Daten in meiner lokalen Datenbank.

EDIT: Ich habe es ein Intervall gemacht, ist nur so ein wenig interessanter:

protected void Page_Load(object sender, EventArgs e) 
{ 
    minDate = new DateTime(1996, 7, 7); 
    maxDate = new DateTime(1996, 7, 15); 
} 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowIndex >= 0) 
    { 
     var curDate = DateTime.Parse(e.Row.Cells[3].Text); 

     if (minDate < curDate && curDate < maxDate) 
     { 
      e.Row.Cells[3].BackColor = Color.Red; 
      e.Row.Cells[3].ForeColor = Color.White; 
     } 
    } 
} 

enter image description here

Verwandte Themen