уведомление о дате истечения срока действия в datagridview - PullRequest
0 голосов
/ 23 сентября 2018

Мне очень нужен совет по этому вопросу, потому что я не знаком с этим foreach утверждением.Итак, мне нужно иметь всплывающее уведомление для истекающих предметов в инвентаре.По крайней мере за 7 дней до истечения срока действия товаров система выдает уведомление пользователю.Итак, здесь я попытался придумать код, но он еще не завершен.

foreach (DataGridViewRow row in InventoryList.Rows)
{
    foreach (DataGridViewColumn col in InventoryList.Columns)
    {
        InventoryList.Rows.[4].Cells[col.Index].Value =
    }

    MessageBox.Show("Nearing Expiry" + "@ItemName");        
}

Вот система, поэтому мне нужно знать, какие элементы приближаются к истечению, по крайней мере, за 7 дней до его истечения

here

Ответы [ 3 ]

0 голосов
/ 23 сентября 2018

Вы можете попробовать что-то вроде этого:

var nowPlusOneWeek = DateTime.Now + new TimeSpan(7, 0, 0, 0);

var expiringItems = InventoryList.Rows.Cast<DataGridViewRow>().
    Where(x => x.Cells[0].Value != null && Convert.ToDateTime(x.Cells[3].Value.ToString()) <= nowPlusOneWeek);

var Expiry = new StringBuilder();
foreach (var item in expiringItems)
    Expiry.Append("Nearing Expiry: " + item.Cells[0].Value.ToString() + "\n");

MessageBox.Show(Expiry.ToString());

Обновление:

Вот несколько кодов, чтобы проверить это на некоторых случайных данных:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        FillTable();
    }

    private void FindBT_Click(object sender, EventArgs e)
    {
        FindExpiring();
    }

    private void FindExpiring()
    {
        var nowPlusOneWeek = DateTime.Now + new TimeSpan(7, 0, 0, 0);

        var expiringItems = InventoryList.Rows.Cast<DataGridViewRow>().
            Where(x => x.Cells[0].Value != null &&
            DateTime.ParseExact(x.Cells[3].Value.ToString(), "dd/MM/yyyy",
            CultureInfo.InvariantCulture) <= nowPlusOneWeek);

        var Expiry = new StringBuilder();
        foreach (var item in expiringItems)
            Expiry.Append("Nearing Expiry: " + item.Cells[0].Value.ToString() + "\n");

        MessageBox.Show(Expiry.ToString());
    }

    void FillTable()
    {
        Random RND = new Random();
        DataTable dt1 = new DataTable();

        dt1.Columns.Add("InventoryID", typeof(int));
        dt1.Columns.Add("ItemID", typeof(int));
        dt1.Columns.Add("Quantity", typeof(int));
        dt1.Columns.Add("ExpityDate", typeof(string));

        for (int i = 0; i < 10; i++)
        {
            DataRow dr1 = dt1.NewRow();
            dr1["InventoryID"] = i;
            dr1["ItemID"] = 1;
            dr1["Quantity"] = 20;
            dr1["ExpityDate"] = (DateTime.Now + new TimeSpan(RND.Next(20), 0, 0, 0)).ToString("dd/MM/yyyy");
            dt1.Rows.Add(dr1.ItemArray);
        }
        InventoryList.DataSource = dt1;
    }
}

Выход:

enter image description here

0 голосов
/ 23 сентября 2018

Привет, Джонатан, попробуй этот пример

DataGridView grd = new DataGridView();
            grd.Columns.Add("Id", "Id");
            grd.Columns.Add("citemName", "Item Name");
            grd.Columns.Add("dExipryDate", "Expires On");


            grd.Rows.Add("1", "Soap", "21 august 2018");
            grd.Rows.Add("2", "Soap2", "21july 2018");
            grd.Rows.Add("3", "Soap3", "30 august 2018");
            grd.Rows.Add("4", "Soap4", "27 june 2018");
            grd.Rows.Add("5", "Soap5", "21 march 2018");
            grd.Rows.Add("6", "Soap6", "28 september 2018");
            grd.Rows.Add("7", "Soap7", "23 october 2018");



            foreach (DataGridViewRow drow in grd.Rows)            {

                DateTime expdate = DateTime.Parse(drow.Cells["dExipryDate"].Value.ToString());

                TimeSpan tmspn = expdate - DateTime.Now.Date;
                if (tmspn.Days < 7 && tmspn.Days >0)
                {
                    //tmspn.Days >0 if you want to show already expired item 
                    MessageBox.Show(drow.Cells["dExipryDate"].Value.ToString() + "Will Expire in " + tmspn.Days + "Days");
                }

            }
0 голосов
/ 23 сентября 2018

1, Добавить новый вызов столбца Expired Status в ваше представление данных.

2,

foreach(DataGridViewRow item in dgvDenominations.Rows)
            {
               if (DateTime.Now.AddDays(7).Equals(DateTime.Parse(item.Cells["yourdateexpriedcellname"].Value.ToString())))
               {
                   item.Cells["ExpiredStatus"].Value = "Nearing Expiry";
                   // orr message if you want
               }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...