я создал приложение winforms.то, что он делает, это запрашивает базу данных и отображает данные на графике на экране.
Мой вопрос: правильно ли использовать классы для этого?я знаю, что ответ, вероятно, да, но я понятия не имею, как использовать класс для этого.
вот мой код.пожалуйста, дайте мне несколько советов о том, как превратить это в класс, если вы считаете, что это правильно:
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.Windows.Forms.DataVisualization.Charting;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private DataTable qResults = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
string qcvalues_query = "SELECT DISTINCT name FROM qvalues ORDER by name";
string analytes_query = "SELECT DISTINCT compound FROM qvalues ORDER by compound";
string instruments_query = "SELECT DISTINCT instrument FROM batchinfo WHERE instrument <> '' AND instrument is not Null ORDER by instrument";
dataGridView1.MultiSelect = false;
cbAnalytes.DisplayMember = "name";
cbAnalytes.DataSource = ConnectandReadList(qcvalues_query);
cbQCValues.DisplayMember = "compound";
cbQCValues.DataSource = ConnectandReadList(analytes_query);
cbInstruments.DisplayMember = "instrument";
cbInstruments.DataSource = ConnectandReadList(instruments_query);
}
private DataSet GetSeriesValues()
{
Series ser = this.chart1.Series["Series1"];
DataSet dataSet = new DataSet();
DataTable seriesTable = new DataTable(ser.Name);
seriesTable.Columns.Add(new DataColumn("No", typeof(int)));
seriesTable.Columns.Add(new DataColumn("X", typeof(string)));
seriesTable.Columns.Add(new DataColumn("Y", typeof(double)));
for (int count = 0; count < ser.Points.Count; count++)
{
DataPoint p = ser.Points[count];
seriesTable.Rows.Add(new object[] { count, p.XValue, p.YValues[0] });
}
dataSet.Tables.Add(seriesTable);
return dataSet;
}
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
// Call Hit Test Method
HitTestResult result = chart1.HitTest(e.X, e.Y);
// Reset Data Point Attributes
foreach (DataPoint point in chart1.Series[0].Points)
{
point.BackSecondaryColor = Color.Black;
point.BackHatchStyle = ChartHatchStyle.None;
point.BorderWidth = 1;
}
// If a Data Point or a Legend item is selected.
if
(result.ChartElementType == ChartElementType.DataPoint ||
result.ChartElementType == ChartElementType.LegendItem)
{
try
{
// Set cursor type
this.Cursor = Cursors.Hand;
// Find selected data point
DataPoint point = chart1.Series[0].Points[result.PointIndex];
// Set End Gradient Color to White
point.BackSecondaryColor = Color.White;
// Set selected hatch style
point.BackHatchStyle = ChartHatchStyle.Percent25;
// Increase border width
point.BorderWidth = 2;
}
catch { }
}
else
{
// Set default cursor
this.Cursor = Cursors.Default;
}
}
private void InitializeChart()
{
chart1.Series["Series1"].ChartType = SeriesChartType.Line;
chart1.Series["Series1"].MarkerStyle = MarkerStyle.Circle;
chart1.Series["Series1"].MarkerSize = 8;
// Set series members names for the X and Y values
chart1.Series["Series1"].XValueMember = "datapath";
chart1.Series["Series1"].YValueMembers = "finalconc";
chart1.DataBind();
// Calculate Mean
double mean = chart1.DataManipulator.Statistics.Mean("Series1");
// Calculate Median
double median = chart1.DataManipulator.Statistics.Median("Series1");
// Calculate Standard Deviation from the Variance
double variance = chart1.DataManipulator.Statistics.Variance("Series1", true);
double standardDeviation = Math.Sqrt(variance);
// Set Strip line item
chart1.ChartAreas[0].AxisY.StripLines[0].IntervalOffset = mean - Math.Sqrt(variance);
chart1.ChartAreas[0].AxisY.StripLines[0].StripWidth = 2.0 * Math.Sqrt(variance);
// Set Strip line item
chart1.ChartAreas[0].AxisY.StripLines[1].IntervalOffset = mean;
// Set Strip line item
chart1.ChartAreas[0].AxisY.StripLines[2].IntervalOffset = median;
DataPoint maxValuePoint = chart1.Series["Series1"].Points.FindMaxByValue();
DataPoint minValuePoint = chart1.Series["Series1"].Points.FindMinByValue();
chart1.ChartAreas[0].AxisY.Maximum = maxValuePoint.YValues.Max();
chart1.ChartAreas[0].AxisY.Minimum = minValuePoint.YValues.Min();
// Refresh Chart
chart1.Invalidate();
}
private DataTable ConnectandReadList(string query)
{
DataTable ds = new DataTable();
string connection_string = "Data Source=hermes;database=qcvalues; Integrated Security=SSPI;";
using (var myConnection = new SqlConnection(connection_string))
{
myConnection.Open();
var command = new SqlCommand(query, myConnection);
var adapter = new SqlDataAdapter(command);
adapter.Fill(ds);
}
return ds;
}
private void btnGenerateGraph_Click(object sender, EventArgs e)
{
string graph_query = @"SELECT top 1000 reporttime,
datapath,
finalconc,
instrument
FROM batchinfo
JOIN qvalues ON batchinfo.rowid = qvalues.rowid
WHERE compound = '" + cbQCValues.Text + "'" +
"AND name = '" + cbAnalytes.Text + "'" +
"AND batchinfo.instrument = '" + cbInstruments.Text + "'" +
"AND batchinfo.reporttime LIKE '10/%/2010%'";
qResults = ConnectandReadList(graph_query);
if (qResults.Rows.Count == 0)
{
MessageBox.Show("Your query did not return any results!");
return;
}
chart1.DataSource = qResults;
InitializeChart();
dataGridView1.Columns.Clear();
dataGridView1.DataBindings.Clear();
dataGridView1.DataSource = qResults;
}
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
// Call Hit Test Method
HitTestResult result = chart1.HitTest(e.X, e.Y);
if (result.ChartElementType == ChartElementType.DataPoint)
{
dataGridView1.Rows[result.PointIndex].Selected = true;
dataGridView1.FirstDisplayedScrollingRowIndex = result.PointIndex;
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
Int32 selectedRowCount =
dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);
if (selectedRowCount == 1)
{
qResults.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
InitializeChart();
}
}
}
}