tbf/ResultsBrowser/Forms/StatisticsDlg.cs

164 lines
5.1 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Results.Entities;
using ResultsBrowser.Resources;
using ResultsBrowser.Output.Printers.Statistics;
namespace ResultsBrowser.Forms
{
public partial class StatisticsDlg : Form
{
IList<WaterMeter> waterMeters;
bool twoDim;
Results.WMeterRsltItemSpec rowItem;
Results.WMeterRsltItemSpec rowItemExt;
Results.WMeterRsltItemSpec columnItem;
Results.WMeterRsltItemSpec columnItemExt;
string rowTestSpec;
string rowExtTestSpec;
string columnTestSpec;
string columnExtTestSpec;
IList<string> rowValues;
IList<string> columnValues;
int[,] occurances;
public StatisticsDlg(IList<WaterMeter> waterMeters, bool twoDim,
Results.WMeterRsltItemSpec rowItem,
Results.WMeterRsltItemSpec rowItemExt,
Results.WMeterRsltItemSpec columnItem,
Results.WMeterRsltItemSpec columnItemExt,
string rowTestSpec,
string rowExtTestSpec,
string columnTestSpec,
string columnExtTestSpec)
{
InitializeComponent();
Text = Strings.Statistics;
closeButton.Text = Strings.OkBtnText;
this.waterMeters = waterMeters;
this.twoDim = twoDim;
this.rowItem = rowItem;
this.rowItemExt = rowItemExt;
this.columnItem = columnItem;
this.columnItemExt = columnItemExt;
this.rowTestSpec = rowTestSpec;
this.rowExtTestSpec = rowExtTestSpec;
this.columnTestSpec = columnTestSpec;
this.columnExtTestSpec = columnExtTestSpec;
}
private void StatisticsDlg_Load(object sender, EventArgs e)
{
Calculate();
}
bool Calculate()
{
try
{
rowValues = new List<string>();
columnValues = new List<string>();
///
/// Find discrete values of rows and columns
///
foreach (var wm in waterMeters)
{
string value = rowItem.Print(wm);
if (rowItemExt != null) value = value + " | " + rowItemExt.Print(wm);
if (!rowValues.Contains(value)) rowValues.Add(value);
if (twoDim)
{
value = columnItem.Print(wm);
if (columnItemExt != null) value = value + " | " + columnItemExt.Print(wm);
if (!columnValues.Contains(value)) columnValues.Add(value);
}
}
///
/// Calculate occurances
///
int columnsCount = Math.Max(1, columnValues.Count);
occurances = new int[rowValues.Count, columnsCount];
foreach (var wm in waterMeters)
{
for (int row = 0; row < rowValues.Count; row++)
{
string rowValue = rowItem.Print(wm);
if (rowItemExt != null) rowValue = rowValue + " | " + rowItemExt.Print(wm);
if (twoDim)
{
for (int column = 0; column < columnsCount; column++)
{
string columnValue = columnItem.Print(wm);
if (columnItemExt != null) columnValue = columnValue + " | " + columnItemExt.Print(wm);
if (rowValue == rowValues[row] && columnValue == columnValues[column])
{
occurances[row, column]++;
}
}
}
else
{
if (rowValue == rowValues[row]) occurances[row, 0]++;
}
}
}
///
/// Update ListBox
///
statisticsListView.View = View.Details;
statisticsListView.GridLines = true;
statisticsListView.FullRowSelect = true;
statisticsListView.Columns.Add(" ", 200);
for (int column = 0; column < columnsCount; column++)
{
statisticsListView.Columns.Add((twoDim ? columnValues[column] : Strings.Count), 70);
}
for (int row = 0; row < rowValues.Count; row++)
{
ListViewItem lvi = new ListViewItem(rowValues[row]);
for (int column = 0; column < columnsCount; column++) lvi.SubItems.Add(occurances[row, column].ToString());
statisticsListView.Items.Add(lvi);
}
return true;
}
catch (Exception exc)
{
MessageBox.Show(exc.Message, Strings.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return false;
}
}
private void closeButton_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;
Close();
}
private void printButton_Click(object sender, EventArgs e)
{
new StatisticsPrintDocument("", rowValues, columnValues, occurances, Config.Entities.PageOrientation.Portrait).Print();
}
}
}