Как я могу узнать, когда обновлять мою БД значениями из DataGridView?(Особые проблемы) - PullRequest
0 голосов
/ 08 августа 2011

Используемая технология: .NET 2008, C #, winforms

Так что в настоящее время у меня есть проблема.У меня есть DatagridView, который содержит данные, извлеченные из базы данных.Предполагается, что пользователю разрешено добавлять и удалять строки по своему усмотрению.

Моя проблема в том, что я понятия не имею, какое событие лучше использовать, чтобы узнать, когда ввод завершен, поэтомуЗатем я могу обновить базу данных.

Я пытался использовать события "Validated, UserAdded, RowsAdded", но другая проблема, с которой я столкнулся, заключается в том, что этот DataGridView извлекает данные из базы данных, и если пользователь перемещаетсядля другой транзакции (с помощью навигатора привязки) некоторые из этих событий запускаются при получении новых данных, что противоречит цели, потому что зачем мне обновлять БД сразу после извлечения данных?

Я также пытался «выйти»", но другая проблема возникает, когда пользователь нажимает на BindingNavigator, чтобы перейти к следующей транзакции.Он не вызывает событие «ввода», поэтому не вызывает «Выход» на DataGridViw, поэтому данные не сохраняются.

Кроме того, как только я получу данные, они будут отправлены на обслуживаниекоторый на самом деле работает CRUD, так что нет ничего необычного дБ автоматического обновления соединения.

Имеет ли все это смысл?

1 Ответ

1 голос
/ 08 августа 2011

Тестирование DataGridView, привязанного к DataTable, со строками, заполненными во время выполнения и изменяющими «сохраненные» всякий раз, когда пользователь вносит изменения, но не запускается при заполнении кодом.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DataLoad();
        }

        void oDataTable_RowChanged(object sender, DataRowChangeEventArgs e)
        {
            if (e.Row.RowState == DataRowState.Added)
            {
                MessageBox.Show("A row was added");
            }
            else if (e.Row.RowState == DataRowState.Deleted)
            {
                MessageBox.Show("A row was deleted");
            }
            else if (e.Row.RowState == DataRowState.Modified)
            {
                MessageBox.Show("A row was modified");
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            DataLoad();
        }

        private void DataLoad()
        {
            // simulate detached data (re)loading
            dataGridView1.DataSource = null; // make sure it's not bound before refresh

            // whatever queried the data and populated a table here
            DataTable oDataTable = new DataTable();
            oDataTable.TableName = "Items";
            oDataTable.Columns.Add(new DataColumn() { ColumnName = "ItemName" });
            oDataTable.Columns.Add(new DataColumn() { ColumnName = "Qty" });

            oDataTable.Rows.Add(new object[] { "Shirt", "1" });
            oDataTable.Rows.Add(new object[] { "Pants", "1" });
            oDataTable.AcceptChanges();

            // rebind gv/table
            dataGridView1.DataSource = oDataTable;

            // add the handler back in for user changes
            oDataTable.RowChanged += new DataRowChangeEventHandler(oDataTable_RowChanged);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...