Проблемы форматирования Datagridview - PullRequest
0 голосов
/ 23 декабря 2011

Я загружаю файл XML, я передаю данные в набор данных и отображаю их с помощью datagridview1.

У меня есть 3 столбца: начало, конец и статус.

Формат начала столбца - дата-время, например, 8:00

Формат конца столбца тоже дата-время, как 22:00

Состояние имеет два значения: ok или nok.

Мне нужно сравнить систему даты и времени с начальным столбцом и конечным столбцом. Если система дат находится между двумя значениями, в строке отображается «ОК». Мне нужно сделать это для каждого ряда. для ОК мне нужно изменить цвет фона на зеленый, и nok будет красным. не могли бы вы помочь мне? .... Я потерялся между набором данных и обзором данных. большое спасибо

Спасибо, ребята, за вашу помощь: я немного изменил код, данный вами:)

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

    } 

        }
    }

У меня все еще проблема, я не видел цвет, отображаемый в сетке данных.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011
       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;
        }

    }
0 голосов
/ 23 декабря 2011

Вы можете попробовать подписаться на событие DataBindingComplete объекта DataGridView

Затем выполнить цикл по строкам

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...