Как сделать таблицу в WinForms через DGV, добавить строки и сохранить все без базы данных? - PullRequest
0 голосов
/ 01 февраля 2020

enter image description here Я создал таблицу с 7 столбцами (идентификатор, дата, тип, имя, расходы, доход, сальдо) в DataGridView. У меня также есть datetime / combobox / texfields и кнопка для добавления соответствующих данных в строки. Пользователь должен иметь возможность добавлять / удалять строки и сохранять их прогресс (чтобы иметь возможность вернуться к нему). Насколько я понимаю, мне нужно связать DataTable с DataGridView, однако я продолжаю получать исключения, такие как «поле идентификатора уже существует», и следующие столбцы (EXPENSES, INCOME, SALDO) дублируются. Кто-нибудь может указать мне, где я не прав, и показать правильный способ сделать это? Я пробовал несколько подходов, но все еще не могу его получить.

public partial class Form1 : Form
{

    DataTable budgetTable = new DataTable();

    public Form1()
    {
        InitializeComponent();

    }

    //adds a row to the table
    private void button1_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(cbbxType.Text) ||
            string.IsNullOrWhiteSpace(expenseField.Text))
        {
            MessageBox.Show("'Type','Expence','Income' fields cannot be empty!");
        }
        else
        DtgTable.DataSource = budgetTable;
        DataColumn id = budgetTable.Columns.Add("ID", typeof(Int32));
        DataColumn date = budgetTable.Columns.Add("DATE", typeof(DateTime));
        DataColumn type = budgetTable.Columns.Add("TYPE", typeof(String));
        DataColumn name = budgetTable.Columns.Add("NAME", typeof(String));
        DataColumn exp = budgetTable.Columns.Add("EXPENSES", typeof(Int32));
        DataColumn inc = budgetTable.Columns.Add("INCOME", typeof(Int32));
        DataColumn sal = budgetTable.Columns.Add("SALDO", typeof(Int32));

        DataRow row = budgetTable.NewRow();
        row["ID"] = "01";
        row["DATE"] = dateTime.Text;
        row["TYPE"] = cbbxType.Text;
        row["NAME"] = nameField.Text;
        row["EXPENSES"] = expenseField.Text;
        row["INCOME"] = incomeField.Text;
        row["SALDO"] = 0;
        budgetTable.Rows.Add(row);
    }

1 Ответ

0 голосов
/ 01 февраля 2020

Итак, благодаря всем советам и небольшим изменениям, я заставил этот фрагмент работать следующим образом:

    public Form1()
    {
        InitializeComponent();
        budgetTable.Columns.Add("id", typeof(Int32));
        budgetTable.Columns.Add("date", typeof(DateTime));
        budgetTable.Columns.Add("type", typeof(String));
        budgetTable.Columns.Add("name", typeof(String));
        budgetTable.Columns.Add("expenses", typeof(Int32));
        budgetTable.Columns.Add("income", typeof(Int32));
        budgetTable.Columns.Add("saldo", typeof(Int32));

        var date = DateTime.ParseExact("29MAR18", "ddMMMyy", CultureInfo.InvariantCulture);

        DataRow row = budgetTable.NewRow();
        row["id"] = "01";
        row["date"] = date;
        row["type"] = cbbxType.Text;
        row["name"] = nameField.Text;
        row["expenses"] = expenseField.Text;
        row["income"] = incomeField.Text;
        row["saldo"] = 0;
        budgetTable.Rows.Add(row);
        DtgTable.DataSource = budgetTable;
        budgetTable.Rows.Clear();
    }


    //adds a row to the table
    private void button1_Click(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(cbbxType.Text) ||
            string.IsNullOrWhiteSpace(expenseField.Text))
        {
            MessageBox.Show("'Type','Expence','Income' fields cannot be empty!");
        }
        else
            budgetTable.Rows.Add(null, dateTime.Text, cbbxType.Text, nameField.Text, expenseField.Text, incomeField.Text, 0);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...