2015-07-21 26 views
6

Voglio cambiare il colore della cella di grdiview in base alle condizioni e la condizione è che se Passport sta per scadere tra un mese o se è già scaduto, quindi voglio per controllare entrambe le condizioni se sta per scadere o se è già scaduta, allora voglio cambiare il colore in rosso. grazieCome modificare il colore della cella della griglia in base alle condizioni utilizzando C#

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

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

+0

ho una logica simile ma non funziona ancora per me – moe

+0

riferirsi a questo articolo, http://codepedia.info/2015/04/gridview-row -color-change-based-on-data-asp-net-c/puoi farlo usando 'e.Row.Cell [3] .CssClass = setColorClass;' –

risposta

7

Ecco un pezzo semplificata del codice che ha lavorato per me e si potrebbe facilmente adattare per il vostro caso:

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; 
     } 
    } 
} 

Questo è il risultato che ottengo:

enter image description here

Nota Sto usando un codice codificato refDate del 15/07/1996, quindi ha senso con i dati nel mio database locale.

EDIT: Ho fatto un intervallo, così è un po 'più interessante:

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

Problemi correlati