在网格视图中根据日期为项目着色 - c#asp.net webforms

时间:2012-07-08 22:43:39

标签: c# asp.net date gridview colors

我有一系列信息存储在网格视图中,每个信息都包含一个日期。这个日期具有历史意义,如果日期超过一年,我希望对日期进行颜色编码,如果日期在10个月到一年之间。

以下是我目前的代码:

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

我的逻辑存在缺陷,因为输出不符合预期。有人能帮忙吗? 提前谢谢。

EDIT :::

我已经编辑了代码,现在看起来它可以正常工作:

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循环。这不是必需的,导致第一个日期被忽略。

2 个答案:

答案 0 :(得分:2)

第二个条件永远不会成立。 没有大于-305且小于-365的数字 此外,如果第二个条件的前半部分为真,则无法达到,因为第一个条件也是如此。 保存自己的困惑,现在从解析的日期中减去并处理正数。

答案 1 :(得分:1)

我认为任何事情都不能满足条件:

if ((datepaid - date_now).Days >= -305 && (datepaid - date_now).Days < -365)

我想不出任何大于或等于-305的值也小于-365。

你也可能最好不要计算你的“经过时间”一次,然后将其保存在局部变量中,然后多次使用该值。否则,在将来的某个时刻,有人会将(datepaid - date_now)更改为其他内容,但会在其他地方将其遗漏。