0

私は、ユーザーが開始値、終了値、スプレッド開始値、およびスプレッド終了値を入力するC#Winform DataTableで単純なグリッド計算を構築しようとしています(以下のコードでは、値をハードコーディングしました)。そこから、テーブルは計算値のマトリックスを作成します。

例(初期構造):

価格ABCD

1
2
3
4

計算値:

1-A、1-B、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();
    }
4

1 に答える 1

1

あなたはこのようなことを試すことができます:

public class Matrix : List<MatrixEntry>
    {
    }

    public class MatrixEntry
    {
        public double Price { get; private set; }

        public double Value1
        {
            get { return (Price - 0.5); }
        }

        public double Value2
        {
            get { return (Price - 0.25); }
        }

        public double Value3
        {
            get { return Price; }
        }

        public double Value4
        {
            get { return (Price + 0.25); }
        }

        public double Value5
        {
            get { return (Price + 0.5); }
        }

        public MatrixEntry(double price)
        {
            Price = price;
        }
    }

static Matrix GetMatrixCalcGrid()
        {
            var matrix = new Matrix();

            try
            {
                double minValue = 1;
                double maxValue = 2;
                double incrementValue = .25;

                for (double i = minValue; i < maxValue + incrementValue; i += incrementValue)
                {
                    var entry = new MatrixEntry(i);
                    matrix.Add(entry);
                }

            }
            catch (Exception ex) { Console.WriteLine("! " + ex); }
            finally { }

            return matrix;
        }

これはあなたが探しているものですか?

注:計算は明らかにハードコーディングしていますが、いくつかのプロパティを追加してユーザー入力を保存し、プロパティを変更して正しい値を返すことができます。私の例の要点は、DataTableを使用するよりも効率的だと思うことです。

于 2013-03-10T02:58:05.640 に答える