1

我的目标是在 DataGridView Cell 中实现 Pi Graph,它将显示待定订单销售点系统的重命名时间。

当我们在 POS 系统上下订单时,它可以是交付或收集订单。交货和收货单包含完成时间。开发这种情况,在 Pi Graph 中显示重命名时间,当时间接近其完成时间时,它会减少。

当前时间到达重命名时间图时必须在图上显示0

在此处输入图像描述

4

1 回答 1

2

第 1 步:如何在 Datagridview 单元格中创建条形图

首先我们有参数或值

  1. 下单时间
  2. 订单完成时间(完成订单所需的时间,例如 120 分钟)。
  3. 当前系统时间。

选择一个 DatagridView 表单工具箱和一个图表。

这个 Datagridview 有列:

在此处输入图像描述 然后创建一个函数

 private void GenerateGraphOfRemaingTiming()
{

    try
    {

        DateTime moment = DateTime.Now;
        
        chart1.Visible = false;

        chart1.ClientSize = new Size(37, 37);
        Bitmap bmp = new Bitmap(chart1.ClientSize.Width, chart1.ClientSize.Height);
        for (int row = 0; row < dataGridView_RecentOrder.RowCount; row++)
        {
            chart1.Series.Clear();
            chart1.Legends.Clear();
            int Hour = int.Parse(moment.Hour.ToString());
            int Min = int.Parse(moment.Minute.ToString());
            int Sec = int.Parse(moment.Second.ToString());
         
            //Add a new chart-series
            string seriesname = "MySeriesName";
            chart1.Series.Add(seriesname);
            //set the chart-type to "Pie"
            chart1.Series[seriesname].ChartType = SeriesChartType.Pie;

            //Add some datapoints so the series. in this case you can pass the values to this method

            chart1.Series[seriesname].LabelForeColor = Color.White;
            chart1.Series[seriesname].BackSecondaryColor = Color.FromArgb(192, 192, 255);
            
            string OrderDateTime = dataGridView_RecentOrder.Rows[row].Cells["Order_PlacingTime"].Value.ToString();
           
            var result = Convert.ToDateTime(OrderDateTime);

            int OHour = int.Parse(result.ToString("HH", System.Globalization.CultureInfo.CurrentCulture));
            int OMin = int.Parse(result.ToString("mm", System.Globalization.CultureInfo.CurrentCulture));
            int OnSec = int.Parse(result.ToString("ss", System.Globalization.CultureInfo.CurrentCulture));

            int OrderMinuts =Convert.ToInt32( (OHour * 60) + OMin + OnSec * 0.0166667);
            int NowTimeInMinuts = Convert.ToInt32( (Hour * 60) + Min + (Sec * 0.0166667));
            int FinalOrderMinutes = int.Parse(dataGridView_RecentOrder.Rows[row].Cells["Order_CompletionTime"].Value.ToString()) - (NowTimeInMinuts - OrderMinuts);
            if (FinalOrderMinutes <= 0)
            {
                FinalOrderMinutes = 0;
            }
            int OrderCompletionTime = int.Parse(dataGridView_RecentOrder.Rows[row].Cells["Order_CompletionTime"].Value.ToString());
            if (OrderCompletionTime == 0)
            {

                OrderCompletionTime = 1;
            }

            int OrderTimingDifference = OrderCompletionTime - FinalOrderMinutes;
            //  MessageBox.Show("Order Min: "+ OrderMinuts.ToString() +"\n Now Time in Min: "+NowTimeInMinuts.ToString());
            chart1.Series[seriesname].Points.AddXY("", OrderTimingDifference);
            chart1.Series[seriesname].Points.AddXY(FinalOrderMinutes.ToString(), FinalOrderMinutes);
         
            chart1.DrawToBitmap(bmp, chart1.ClientRectangle);

           // bmp = OvalImage(bmp);

            dataGridView_RecentOrder.Rows[row].Cells["Order_RemaningTime"].Value = bmp.Clone();
          
        }
    }
    catch (Exception ex)
    {

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

}

出这个会是这样的。

在此处输入图像描述

在此处输入图像描述

第 2 步:如何在系统时间增加时自动图形值减少。

    public void StartOrderTimingCounter()
    {

        System.Windows.Forms.Timer OrderRemaningTimer = new System.Windows.Forms.Timer();
        OrderRemaningTimer.Interval = 60000; // specify interval time as you want
        
        OrderRemaningTimer.Tick += new EventHandler(timer_Tick);
        OrderRemaningTimer.Start();
        


    }
  
    void timer_Tick(object sender, EventArgs e)
    {
// call above implemented function
        GenerateGraphOfRemaingTiming();
      
    }
于 2020-07-04T07:54:39.680 回答