Я создал калькулятор плана платежей, специфичный для отрасли, в которой я работаю. Наконец-то я получил весь код для правильного выполнения и загрузки плана платежей для заполнения в сетке данных.
Мне нужна сетка данных (а также некоторая другая информация) для физической печати нашего локального принтера, в PDF или, по крайней мере, для повторного заполнения другой формы.
Идея состоит в том, чтобы не допустить, чтобы мои сотрудники заполняли информацию вручную на бумаге после расчета схемы оплаты.
После того, как все сделано, сетка данных показывает даты и суммы каждого платежа в строковом формате.
У меня есть 2 формы.
MainInterface.cs - полный калькулятор в одном «приложении на одной странице»
Здесь заполняется сетка данных с планом платежей
Это содержит весь мой код и функциональный интерфейс
AutoPay.cs - Визуальное представление «отчета», который я пытаюсь распечатать. Это появляется, если пользователь нажимает на Экспорт на панели инструментов. Здесь ничего не закодировано. Это просто панель, dataGridView и несколько текстовых полей для дополнительной «пользовательской» информации, которая будет добавлена перед отправкой данных в PDF или на принтер (например: «Запуск в 7 вечера»)
ВСЕ мой код и функциональный интерфейс прямо сейчас находятся в MainInterface.cs.
Я придерживаюсь этого подхода, потому что несколько раз мне не удавалось заставить работать средства просмотра Windows и Crystal Report. На данный момент я просто ищу функционал и почти готов просто сказать им, чтобы они сделали скриншот приложения и распечатали скриншот (не идеально).
Думаю, я только что добавил зависимости и / или библиотеки, которые на самом деле не нужны моему приложению.
У меня есть более 2000 строк кода в MainInterface.cs (я довольно новичок во всем этом, и я доберусь до изучения структур Class / Scope, как только у меня это получится).
Если это уместно, вот операторы using и информация о пространстве имен:
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace PaymentPlanCalculator
{
public partial class paymentPlanCalculator : Form
{ //My entire app (MainInterface.cs is in here)
Вот как заполняется сетка данных:
-Даты рассчитаны
-Счета рассчитываются
-Количество платежей и некоторые основные математические алгоритмы рассчитывают платежи для различных ситуаций
public void CreateInstallmentDates(int payCycle)
{
//int payCycle; // Initialize Integer for PayCycle Days
int numberOfPayments = Convert.ToInt16(lblTotalPaymentCount.Text); // Set number of payments
DateTime downPaymentDate = monthCalendarDP.SelectionStart;
DateTime[] paymentPlanDates = new DateTime[numberOfPayments];
//DateTime[] paymentPlanDates = new DateTime[numberOfPayments];
paymentPlanDates[0] = downPaymentDate;
//This repeats 11 more times, each with 1 'payment' removed
//This is how the payment dates are calculated:
if (Convert.ToInt16(lblTotalPaymentCount.Text) == 12)
{
DateTime firstInstallmentDate = monthCalendarInstallmentStart.SelectionStart;
paymentPlanDates[1] = firstInstallmentDate; // 2 Payments
}
//...this repeats many more times
}
Очевидно, что код похож на спагетти
public void PopulateDataGrid() // THESE ALL NEED THE ADDRESSES TO ADD
{
dataGridPPA.Rows.Clear();
CalculatePaymentDates(); // Call to calculate dates
int numberOfPayments = Convert.ToInt16(lblTotalPaymentCount.Text);
//With Down Payment and PPA DP and PPA W/ or W/O SIF
if (txtDownPayment.Text != "0.00" && lblInstallmentAmt.Text != "0.00" && sliderRemainingPmtCount.Value > 1) // If PPA has down payment and PPA
{
dataGridPPA.Rows.Add(); // Add row
dataGridPPA["pmtDate", 0].Value = monthCalendarDP.SelectionStart.ToShortDateString(); // Which date is selected (set it to a string)
dataGridPPA["pmtAmount", 0].Value = String.Format("${0:00}", txtDownPayment.Text); // Take payment amount in Down Payment and add to grid
// FILL THE INSTALLMENT PAYMENTS
for (int ppaRow = 1; ppaRow < (numberOfPayments - 1); ppaRow++) // Select second row
{
dataGridPPA.Rows.Add(); // Add row
dataGridPPA["pmtDate", ppaRow].Value = PPADates[ppaRow].ToShortDateString(); // Select Date from PPA Dates Array
dataGridPPA["pmtAmount", ppaRow].Value = lblInstallmentAmt.Text; // Set installment amount to sting
}
// FILL THE FINAL INSTALLMENT PAYMENT
dataGridPPA.Rows.Add(); // Add final row // Error when not set to schedule - Likely Fixed
dataGridPPA["pmtDate", numberOfPayments - 1].Value = PPADates[numberOfPayments - 1].ToShortDateString(); // Select Final Date from PPA Date Array
dataGridPPA["pmtAmount", numberOfPayments - 1].Value = lblRemainder.Text; // Adds remainder amount (after date in previous row)
}
}
Весь этот код работает и делает то, что мне нужно, но, как вы видите, он грязный, поэтому мне нужно просто взять
dataGridPPA из MainInterface.cs и скопировать его в AutoPay.cs
OR
Если это все смешно, я могу попробовать метод «экспортировать в отчет» еще раз. Я просто не могу найти хороших учебников, в которых качество звука и акценты не мешают им следовать.
Думаю, у меня проблема с объемом. Если я попытаюсь просто сделать это:
dataGridPPA = exportPPAdataGrid
или любая итерация чего-либо отдаленно похожего, intellisense, по сути, показывает мне, что я не могу читать данные из одной формы в другую, несмотря на то, что в обеих формах все открыто.
Я пытался вызвать классы и пространства имен, но мне не повезло.
Я попытался создать источник данных из dataGridPPA и перенести его таким образом, очевидно, я был над головой.
Я готов сделать все, что поможет мне доставить данные в нужное место и открыть для ЛЮБЫХ предложений. Чем проще или проще, тем лучше.