Создание DataTable в C # с одним столбцом за раз - PullRequest
0 голосов
/ 24 марта 2010

Я пытаюсь создать Пенсионный калькулятор как шанс сделать что-то полезное и лучше изучить C #. В настоящее время я пытаюсь построить DataTable с динамическим количеством строк / столбцов.

Для контекста, я прошу пользователя ввести некоторые данные, касающиеся зарплаты,% от инвестируемой зарплаты и ожидаемой рентабельности инвестиций. У меня тоже есть кое-что другое, но на самом деле это не часть моей проблемы. Поскольку количество столбцов, которое мне нужно для DataTable, неизвестно до тех пор, пока не будет запущена формула (пока завершается цикл + for), у меня возникают проблемы при работе с DataColumns. Надеюсь, приведенный ниже код поможет.

Я действительно пытаюсь построить таблицу по одному столбцу за раз. Я понимаю, что мог бы перевернуть его, чтобы построить его по одной строке за раз, потому что известны годы до выхода на пенсию (yearsRetire), но я бы предпочел не делать этого и хочу узнать больше. Извините за отступы и комментарии. Я попытался оставить некоторые из моих комментируемых попыток кодирования там. Спасибо за любую помощь.

public double calcROI()
{     
   double testROI = 0.00;
   double tempRetireAmount = 0;
   double adjustRetire = goalAmount * (1 + (Math.Pow(inflation,yearsRetire)));

// Loop through ROI values until the calculated retire amount with the test ROI
// is greater than the target amount adjusted for inflation
while (tempRetireAmount < adjustRetire)
{
    //Increment ROI by 1% per while iteration
    testROI += .01;  

    //Make a new Column to hold the values for ROI for this while iteration
    //dtMain.Columns.Add(Convert.ToString(testROI));       
    //DataColumn tempdc = new DataColumn(Convert.ToString(testROI));

    //Loop through the number of years entered by user and see the amount
    //at Retirement with current ROI
    for (int i = 0; i < yearsRetire; i++)
    {
        //Main formula to calculate amount after i years
        tempRetireAmount = (tempRetireAmount + salary*savingsPct) * (1 + testROI);

        // Add value for this year/ROI to table/column
        //DataRow dr = .NewRow();
        //dr tempRetireAmount;
        //tempdc[i] = tempRetireAmount;

    }
    //Need to add column of data to my Main DataTable
    //dtMain.Rows.Add(dr);
    //dtMain.Columns.Add(tempdc);
}
return testROI;

}

ОБНОВЛЕНИЕ: Я просто не хочу сказать, что это лучший подход, поскольку я выхожу из своей области знаний по умолчанию. Обычно я просто собирал матрицу с максимальным размером (array [maxrows] [maxcols]) и заполнял ее. Я пытался думать меньше как на C и использовать некоторые возможности C #. Если есть намного лучший способ, я с удовольствием поменяю технику. Благодаря.

Ответы [ 2 ]

2 голосов
/ 24 марта 2010

Не думаю, что стоит добавлять столбцы в DataTable после добавления строк.

Лучшее, что можно сделать в этом случае, - это вычислить все в массивы и построить DataTable в конце

0 голосов
/ 24 марта 2010

Хорошо. Я не согласен с подходом, принятым здесь, как вы объясняете в своем вопросе, однако, для добавления столбцов в DataTable вы должны принять во внимание, что значения для добавляемых в данный момент строк будут DBNull.

Класс DataColumn имеет два свойства, которые могут быть вам полезны:

    // default value for the newly added rows
columna.DefaultValue = 0;

    // whether your column allows DBNull values (which is true for this case)
columna.AllowDBNull = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...