我加载了一个XML文件,我将数据传输到数据集,然后用datagridview1显示。
我有3个列:开始,结束和状态。
列开始的格式是日期时间,如上午8:00
列结尾的格式是日期时间,也类似于10:00 PM
状态是两个值:ok或nok。
我需要将datetime系统与start列和end列进行比较,如果日期系统介于两个值之间,我在行中显示ok。我需要为每一行做到这一点。好吧,我需要将背景颜色更改为绿色,nok将为红色。 你可以帮帮我吗? ....我在数据集和datagridview之间丢失了。 非常感谢
谢谢你们的帮助:我修改了一些代码,由你们提供:)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Globalization;
using System.Security.Permissions;
namespace tab
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DataSet ds = new DataSet();
ds.ReadXml("C:\\Sites.xml");
int count = 0;
foreach (DataRow dr in ds.Tables[0].Rows)
{
string s1 = dr[0].ToString();
string s2 = dr[1].ToString();
string timeSys = DateTime.Now.ToString("hh:mm tt");
TimeSpan Start = DateTime.ParseExact(s1, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
TimeSpan End = DateTime.ParseExact(s2, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
TimeSpan Now = DateTime.ParseExact(timeSys, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
if (Start.Hours < Now.Hours && Now.Hours < End.Hours)
{
ds.Tables[0].Rows[count][2] = "OK";
}
else
{
ds.Tables[0].Rows[count][2] = "NOK";
}
count++;
}
dataGridView1.DataSource = ds.Tables[0];
for (int icount = 0; icount < dataGridView1.RowCount-1; icount++)
{
DataGridViewRow theRow = dataGridView1.Rows[icount];
if (theRow.Cells[2].Value.ToString() == "OK")
theRow.Cells[2].Style.BackColor = Color.Green;
else
theRow.Cells[2].Style.BackColor = Color.Red;
}
}
}
}
我还有一个问题,我没有看到datagridview中显示的颜色。
答案 0 :(得分:0)
您可以尝试订阅DataGridView的DataBindingComplete
事件
然后遍历行
string s1 = "08:00 AM"; // this corresponds to your start value in grid
string s2 = "10:00 PM";
TimeSpan start = DateTime.ParseExact(s1, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
TimeSpan end = DateTime.ParseExact(s2, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
TimeSpan now = DateTime.Now.TimeOfDay;
现在可以在这些行上稍微设置单元格颜色
if(now > start && now < end)
row.Cells[colname].Style.BackColor = Color.Green;
答案 1 :(得分:0)
DataSet ds = new DataSet();
ds.ReadXml(@"...\\..\\Sites.xml");
int count = 0;
foreach (DataRow dr in ds.Tables[0].Rows)
{
string s1 = dr[0].ToString();
string s2 = dr[1].ToString();
TimeSpan ts1 = DateTime.ParseExact(s1, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
TimeSpan ts2 = DateTime.ParseExact(s2, "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
TimeSpan now = DateTime.Now.TimeOfDay;
if (ts1.Hours >= 8 && ts2.Hours <= 22)
{
ds.Tables[0].Rows[count][2] = "OK";
}
else
{
ds.Tables[0].Rows[count][2] = "NOK";
}
count++;
}
grdvw_wnfrm.DataSource = ds.Tables[0];
for (int icount = 0; icount < grdvw_wnfrm.RowCount-1; icount++)
{
DataGridViewRow theRow = grdvw_wnfrm.Rows[icount];
if (theRow.Cells[2].Value.ToString() == "OK")
theRow.Cells[2].Style.BackColor = Color.Green;
else
theRow.Cells[2].Style.BackColor = Color.Red;
}
}