将按钮事件改为方法,并在DateTimePicker值改变时调用
如果您希望将整个按钮事件改为一个方法,以便在 DateTimePicker 的值更改时调用,可以将按钮事件中的代码提取到一个单独的方法中,并在按钮事件和 DateTimePicker 的值更改事件中调用该方法。/n/n以下是一个示例代码,演示如何将按钮事件改为一个方法:/n/ncsharp/nprivate void uiButton1_Click_1(object sender, EventArgs e)/n{/n UpdateChart();/n}/n/nprivate void uiDatePicker1_ValueChanged(object sender, EventArgs e)/n{/n UpdateChart();/n}/n/nprivate void UpdateChart()/n{/n string erpConnString = 'Server=192.168.1.180;initial catalog=DB_2015_20211029;user id=sa;password=gdzy5tgb6yhn;Connect Timeout=5';/n DateTime selectedDate = uiDatePicker1.Value;/n/n // 创建一个DataTable来存储周期和合格率数据/n DataTable dataTable = new DataTable();/n dataTable.Columns.Add('周期', typeof(string));/n dataTable.Columns.Add('合格率', typeof(double));/n/n // 计算过去15个周期的起始日期和结束日期,并查询合格率数据/n for (int i = 0; i < 15; i++)/n {/n DateTime startDate = selectedDate.AddDays(-(int)selectedDate.DayOfWeek + 1 - (i * 7));/n DateTime endDate = startDate.AddDays(6);/n string period = $'{startDate.ToString('MM')}月第{GetWeekOfMonth(startDate)}周';/n/n string query = $@'SELECT SUM(qty_chk) AS '送检量', SUM(qty_ok) AS '合格量', SUM(qty_lost) AS '不合格量'/n FROM tf_ty/n WHERE rk_dd >= '{startDate.ToString('yyyy-MM-dd')}' AND rk_dd <= '{endDate.ToString('yyyy-MM-dd')}'';/n/n using (SqlConnection connection = new SqlConnection(erpConnString))/n {/n SqlCommand command = new SqlCommand(query, connection);/n connection.Open();/n/n SqlDataReader reader = command.ExecuteReader();/n if (reader.Read())/n {/n int qtyChk = Convert.ToInt32(reader['送检量']);/n int qtyOk = Convert.ToInt32(reader['合格量']);/n/n double passRate = (double)qtyOk / qtyChk * 100;/n/n // 将周期和合格率数据添加到DataTable中/n dataTable.Rows.Add(period, passRate);/n }/n/n reader.Close();/n }/n }/n/n // 按照周期进行倒序排序/n dataTable.DefaultView.Sort = '周期 DESC';/n dataTable = dataTable.DefaultView.ToTable();/n/n // 将DataTable中的数据填充到chart2的曲线图中/n Chart chart2 = (Chart)((Control)sender).FindForm().Controls.Find('chart2', true)[0];/n chart2.DataSource = dataTable;/n chart2.Series.Clear();/n chart2.Series.Add('合格率');/n chart2.Series['合格率'].XValueMember = '周期';/n chart2.Series['合格率'].YValueMembers = '合格率';/n chart2.Series['合格率'].ChartType = SeriesChartType.Spline;/n chart2.Series['合格率'].BorderWidth = 3; // 设置曲线的边框宽度为3/n chart2.Series['合格率'].IsValueShownAsLabel = true; // 显示标记标签/n chart2.Series['合格率'].LabelFormat = '0.0//%'; // 标签格式/n chart2.Series['合格率'].LabelForeColor = System.Drawing.Color.Black; // 设置标签字体颜色/n chart2.Series['合格率'].LabelBackColor = System.Drawing.Color.Transparent; // 设置标签背景色为透明/n chart2.Series['合格率'].Font = new System.Drawing.Font('Arial', 12); // 设置标签字号和字体/n chart2.ChartAreas[0].AxisY.Minimum = 80; // 设置Y轴的最小值为80/n chart2.ChartAreas[0].AxisY.Maximum = 120; // 设置Y轴的最大值为120/n chart2.ChartAreas[0].AxisX.Interval = 1; // 设置X轴的间隔为1/n chart2.ChartAreas[0].AxisX.LabelStyle.Angle = -45; // 设置X轴标签的角度为-45度/n chart2.ChartAreas[0].AxisX.LabelStyle.Font = new System.Drawing.Font('Arial', 10); // 设置X轴标签的字体/n chart2.ChartAreas[0].AxisX.MajorGrid.Enabled = false; // 禁用X轴的网格线/n chart2.DataBind();/n/n // 更新X轴的标签/n for (int i = 0; i < dataTable.Rows.Count; i++)/n {/n chart2.ChartAreas[0].AxisX.CustomLabels.Add(i + 0.5, i + 1.5, dataTable.Rows[i]['周期'].ToString());/n }/n}/n/n/n在上述代码中,将按钮事件和 DateTimePicker 的值更改事件都调用了 UpdateChart 方法,该方法包含了原来按钮事件中的代码。这样,无论是点击按钮还是更改 DateTimePicker 的值,都会触发 UpdateChart 方法来更新图表。
原文地址: https://www.cveoy.top/t/topic/lMr 著作权归作者所有。请勿转载和采集!