2

グリッドビューに保存された情報の行があり、それぞれに日付が含まれています。この日付は歴史的なものであり、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ループを削除しました。これは不要であり、最初のデートは無視されました。

4

2 に答える 2

2

2 番目の条件が真になることはありません。-305 より大きく、-365 より小さい数値はありません。また、2 番目の条件の前半が true の場合、最初の条件も true になるため、到達しません。混乱を避けて、解析された日付から今すぐ減算し、正の数を処理してください。

于 2012-07-08T22:53:57.297 に答える
1

条件を満たせるものは何もないと思います:

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

-305 以上で -365 未満の値は考えられません。

また、「経過時間」を一度計算してからローカル変数に保存し、その値を何度も使用する方がよいでしょう。そうしないと、将来のある時点で、誰かが(datepaid - date_now)別のものに変更することになりますが、別の場所でそれを見逃してしまいます。

于 2012-07-08T22:54:23.473 に答える