Контрол (Control) - специальный элемент Micrsoft Visual Studio применяется при разработке интерфейса форм Windows. Сущность таких элементов заключается в том, что разработав один раз такой элемент, далее можно применить многократно. Чаще всего он имеет параметры, которые используются для его настройки.
Рассмотрим "Контрол. Анализ продаж ABC". Алгоритм ABC означает, что в продажах товаров и услуг приносят прибыль разные группы элементов. Группа А - 80% продаж, Группа B - 16% продаж, Группа С - 4% продаж. Интересно знать, что же дает основную прибыль компании. Фактически этот графический контрол-элемент позволяет руководству компании быстро оценить продажи за разные промежутки времени и принять правильные решения по торговле.
При разработке контрол-элемента используется библиотека LinQ и Chart из Microsoft Visual Studio. Пример программы на C# дан ниже. Обратите внимание как можно отформатировать график в рублях и его цвет. Например, при больших объемах продаж лучше информацию выводить в тысячах или даже миллионах рублей.
protected void LoadChartRes()
{
try
{
DataTable dt = GetDataFromGrid();
int n = Convert.ToInt32(comboBoxMaxCount.Text);
string[] x = (from p in dt.AsEnumerable()
select "Группа " + p.Field<string>("Группа ABC")).Take(n).ToArray();
Decimal[] y1 = (from p in dt.AsEnumerable()
select p.Field<Decimal>("Сумма_ALL")).Take(n).ToArray();
Decimal[] y2 = (from p in dt.AsEnumerable()
select p.Field<Decimal>("Кол_ALL")).Take(n).ToArray();
ChartRes.Series[0].IsValueShownAsLabel = true;
ChartRes.Series[0].Points.DataBindXY(x, y1);
ChartRes.Series[0].LabelForeColor = Color.DarkGreen;
ChartRes.Series[0].LabelFormat = "{### ### ### ##0} руб.";
ChartRes.Series[0].Font = new System.Drawing.Font("Ariel", 14f);
ChartRes.ChartAreas[0].AxisX.LabelStyle.Font = new System.Drawing.Font("Ariel", 14f); // По оси Y
ChartRes.ChartAreas[0].AxisY.LabelStyle.Format = "{### ### ### ##0}";
ChartRes.Series[1].IsValueShownAsLabel = true;
ChartRes.Series[1].Points.DataBindXY(x, y2);
ChartRes.Series[1].LabelForeColor = Color.Blue;
ChartRes.Series[1].LabelFormat = "Кол-во = {### ### ### ##0}";
ChartRes.Series[1].Font = new System.Drawing.Font("Ariel", 12f);
if (ChartRes.Series.Count > 2)
{
ChartRes.Series.RemoveAt(2);
}
// 3D график
ChartRes.ChartAreas[0].Area3DStyle.Enable3D = checkBoxChart3D.Checked;
if (comboBoxChartView.Text == null) comboBoxChartView.Text = "Bar";
SeriesChartType ChartType = SeriesChartType.Bar;
switch (comboBoxChartView.Text)
{
case "Бар":
ChartType = SeriesChartType.Bar;
break;
case "Колонки":
ChartType = SeriesChartType.Column;
break;
case "Сплайн":
ChartType = SeriesChartType.Spline;
break;
case "Площадь":
ChartType = SeriesChartType.Area;
break;
case "Круг":
ChartType = SeriesChartType.Pie;
break;
}
for (int i = 0; i < ChartRes.Series.Count; i++)
{
ChartRes.Series[i].ChartType = ChartType;
}
}
catch (Exception ex)
{
MessageBox.Show("Случилась незапланированная ошибка в расчетах. Измените параметры.\nСистемное сообщение. " + ex.Message, "Построение графика", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}