如何使用 C#.Net 在 DataGridView 单元格中 Create/Draw 圆周率图
How to Create/Draw Pi Graph in DataGridView Cell using C#.Net
我的目标是在 DataGridView Cell 中实现 Pi Graph,它将显示销售点系统挂起订单的重命名时间。
当我们在 POS 系统下订单时,它可以是交货单或取货单。
交货单和取货单包含完成时间。
开发这个场景,其中重命名时间显示在 Pi Graph 中,并且当时间接近完成时间时它会减少。
当当前时间到达重命名时间图表时必须在图表上显示0
Step 1: How to Create Bar Graph in Datagridview Cell
首先我们有参数或值
- 下单时间
- 订单完成时间(完成订单所需的时间,例如 120 分钟)。
- 当前系统时间。
Select 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());
}
}
输出出来会是这样的。
Step 2: How to automatically graph value decrease when system time increase.
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();
}
我的目标是在 DataGridView Cell 中实现 Pi Graph,它将显示销售点系统挂起订单的重命名时间。
当我们在 POS 系统下订单时,它可以是交货单或取货单。 交货单和取货单包含完成时间。 开发这个场景,其中重命名时间显示在 Pi Graph 中,并且当时间接近完成时间时它会减少。
当当前时间到达重命名时间图表时必须在图表上显示0
Step 1: How to Create Bar Graph in Datagridview Cell
首先我们有参数或值
- 下单时间
- 订单完成时间(完成订单所需的时间,例如 120 分钟)。
- 当前系统时间。
Select 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());
}
}
输出出来会是这样的。
Step 2: How to automatically graph value decrease when system time increase.
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();
}