0

私のコードは行の色を変更するために機能しますが、正しい if ステートメントを作成する必要があります。セル[0]には、日付値「2013.03.20」があります。この日付は、製品の有効期限を意味します。

foreach (DataGridViewRow row in dataGridView1.Rows)
{
  if (row.Cells[0](dont know how write))
  {
   row.DefaultCellStyle.BackColor = Color.Red;
  }
}

例:

  • 今日は 2013.03.10
  • 商品の賞味期限は2013.03.20です。
  • 製品の有効期限の最後の 7 日間は黄色になります。(つまり、13 日から 20 日まで)
  • 製品の有効期限が切れたら、赤で表示したい。
4

4 に答える 4

4

このようなものです (Visual Studio を使用していないので頭のてっぺんから離れているため、軽微な構文エラーはご容赦ください)。null や無効な日付などを処理するには、おそらく DateTime 変換をもう少し堅牢にする必要があります。正確な要件に合わせて条件を調整できます。

 foreach (DataGridViewRow row in dataGridView1.Rows)
                switch (Convert.ToDatetime(row.Cells[0].ToString()))
                {
                   case > DateTime.Today:
                      row.DefaultCellStyle.BackColor = SomeColor;  
                      break;
                   case == DateTime.Today:
                      row.DefaultCellStyle.BackColor = SomeColor;  
                      break;
                    case else:
                      row.DefaultCellStyle.BackColor = SomeColor;  
                      break;
                }
于 2013-03-22T14:19:21.977 に答える
3

サイモンが言ったように、DateTime の誤った日付形式も処理する必要があります。

foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            var now = DateTime.Now;
            var expirationDate =  DateTime.Parse(row.Cells[0].Value.ToString());
            var sevenDayBefore = expirationDate.AddDays(-7);

            if (now > sevenDayBefore && now < expirationDate)
            {
                row.DefaultCellStyle.BackColor = Color.Yellow;
            }
            else if (now > expirationDate)
            {
                row.DefaultCellStyle.BackColor = Color.Red;    
            }
        }
于 2013-03-22T14:38:10.623 に答える
0

foreach を使用する代わりに、 RowDataBoundイベント ハンドラーを使用できます。RowDataBound イベント ハンドラーを使用するのは、これらのことだと思います。

public void dataGridView1_RowDataBound(Object sender, GridViewRowEventArgs e)  
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        Product currentProduct = e.Item.DataItem as Product;

        TimeSpan diffDate = DateTime.Now - currentProduct.ExpireDate;

        if (dateDiff < TimeSpan.FromDays(0))
        {
            row.DefaultCellStyle.BackColor = Color.Yellow;
        }
        else if (dateDiff < TimeSpan.FromDays(7))
        {
            row.DefaultCellStyle.BackColor = Color.Red;
        }
    }  

}
于 2013-03-22T14:31:35.650 に答える