Я пытаюсь построить простой подсчет сетки в C# Winform DataTable, где пользователь вводит начальное значение, конечное значение, начальное значение распространения и значение окончания распространения (в приведенном ниже коде я просто жестко закодировал значения). Оттуда в таблице построена матрица вычисленных значений.C# Datatable Grid Calculation
Например (исходная структура):
Цена ABCD
Рассчитанные значения:
1 -, 1 - Б, 1 - C, 1 - D, 2 - A, 2 - B, 2 - C, 2 - D, 3 - A, 3 - B, 3 - C, 3 - D, 4 - A, 4 - B, 4 - C, 4 - D,
Нижняя сетка была моей первой попыткой построить расчетную сетку - что было бы лучшим решением в этом, чем ниже ?:
static DataTable GetCalcGrid()
{
DataTable table = new DataTable();
table.Clear();
DataColumn column;
DataRow row;
try
{
//double minValue = (double)startingPrice.Value;
double minValue = 1;
//double maxValue = (double)endingPrice.Value;
double maxValue = 2;
//double incrementValue = (double)incrementPrice.Value;
double incrementValue = .25;
//double minSpreadValue = (double)spreadRangeLow.Value;
double minSpreadValue = -.50;
//double maxSpreadValue = (double)spreadRangeHigh.Value;
double maxSpreadValue = .50;
//double incrementSpreadValue = (double)spreadIncrement.Value;
double incrementSpreadValue = .25;
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "N*";
column.AutoIncrement = true;
column.AutoIncrementSeed = 1;
column.AutoIncrementStep = 1;
table.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.Double");
column.ColumnName = "Price";
table.Columns.Add(column);
for (double x = minSpreadValue; x < maxSpreadValue + incrementSpreadValue; x += incrementSpreadValue)
{
double value;
value = x;
column = new DataColumn();
column.DataType = System.Type.GetType("System.Double");
column.ColumnName = value.ToString("0.000");
table.Columns.Add(column);
table.Columns[value.ToString("0.000")].Expression = "(([Price] + (" + value + ")))";
//table.Columns[value.ToString("0.000")].Expression = " " + OP.black("C",4,Convert.ToDouble("(([Price] + (" + value + ")))"),.32,15,365,.003,1).ToString() + " ";
}
for (double i = minValue; i < maxValue + incrementValue; i += incrementValue)
{
row = table.NewRow();
row["Price"] = i;
table.Rows.Add(row);
}
}
catch (Exception ex) { MessageBox.Show("! " + ex); }
finally { }
return table;
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = GetCalcGrid();
}
Здесь, похоже, нет вопроса. –
Что именно вы ищете, когда говорите, что хотите получить лучшее решение? – Matt
@Matt - путь, который я создал, это использование выражений. Я бы предположил, что есть более быстрое и лучшее решение для кодирования, чем это. Может быть, многомерные массивы - лучшее решение. – JAS