グリッドビューに保存された情報の行があり、それぞれに日付が含まれています。この日付は歴史的なものであり、1年以上経過している場合、および10か月から1年経過している場合は、日付を色分けしたいと思います。
これが私が現在持っているコードです:
foreach(GridViewRow row in gridview.Rows){
if (e.Row.RowType == DataControlRowType.DataRow)
{
DateTime datepaid = Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "date_stored"));
DateTime date_now = DateTime.Now;
TextBox1.Text = (date_sub_paid - DateTime.Now).ToString();
if ((datepaid - DateTime.Now).Days >= -365)
{
e.Row.Cells[4].ForeColor = System.Drawing.Color.Red;
e.Row.Cells[4].Font.Bold = true;
}
else if ((datepaid - date_now).Days >= -305 && (datepaid - date_now).Days < -365)
{
e.Row.ForeColor = System.Drawing.Color.Yellow;
}
else
{
e.Row.ForeColor = System.Drawing.Color.Black;
}
}
}
これは出力が期待どおりではないため、私のロジックに欠陥があります。誰かがこれを手伝うことができるでしょうか?前もって感謝します。
編集:::
コードを編集しましたが、正しく機能しているように見えます。
foreach(GridViewRow row in subtracker_gridview.Rows){
if (e.Row.RowType == DataControlRowType.DataRow)
{
DateTime datepaid= Convert.ToDateTime(DataBinder.Eval(e.Row.DataItem, "DATE"));
DateTime date_now = DateTime.Now;
TextBox1.Text = (date_now - datepaid).Days.ToString();
if ((date_now - datepaid).Days >= 365)
{
e.Row.Cells[4].ForeColor = System.Drawing.Color.Red;
e.Row.Cells[4].Font.Bold = true;
}
else if ((date_now - datepaid).Days >= 335 && (date_now - datepaid).Days < 365)
{
e.Row.Cells[4].ForeColor = System.Drawing.Color.Gold;
e.Row.Cells[4].Font.Bold = true;
}
else
{
e.Row.Cells[4].ForeColor = System.Drawing.Color.Green;
e.Row.Cells[4].Font.Bold = true;
}
}
しかし、最初の行は無視されているようで、色付けされていませんか?なぜこれが起こっているのか考えはありますか?ご協力いただきありがとうございます。
編集#2:foreachループを削除しました。これは不要であり、最初のデートは無視されました。