вторник, 31 мая 2011 г.

Сохранение изменений в БД через DataGridView

По старинке, для внесения изменений, произошедших в DataGridView, я определял заново соединение, OleDbDataAdapter, OleDbCommandBuilder и DataSet – и, возможно, это и правильно, потому что нам потом легче изменять, например, строку запроса.
public partial class Frm_ref_staff : Form
    {
        public Frm_ref_staff()
        {
            InitializeComponent();
        }
        //объявление строки соединения
        public OleDbConnection conn;
        //view1
        public OleDbDataAdapter dataadapter_tbl_staff;
        public OleDbCommandBuilder comandbuilder_tbl_staff;
        public DataSet dataset_tbl_staff;
        private void Frm_ref_staff_Load(object sender, EventArgs e)
        {
            //строка соединения
            conn = new OleDbConnection("Provider=SQLOLEDB;Data Source=IST;Integrated Security=SSPI;Initial Catalog=DBGIS");
            if (conn.State != ConnectionState.Open)
                conn.Open();

            dataadapter_tbl_staff = new OleDbDataAdapter("SELECT * FROM Tbl_officer", conn);
            comandbuilder_tbl_staff = new OleDbCommandBuilder(dataadapter_tbl_staff);
            dataset_tbl_staff = new DataSet();
            dataadapter_tbl_staff.Fill(dataset_tbl_staff, "staff");
            dataadapter_tbl_staff.TableMappings.Add("Table_staff", "staff");
            dataGridView1.DataSource = dataset_tbl_staff.Tables[0];
        }
        private void Frm_ref_staff_FormClosed(object sender, FormClosedEventArgs e)
        {
            ((Frm_VodoCheb)this.MdiParent).staffToolStripMenuItem.Visible = true;
        }
        private void button1_Click(object sender, EventArgs e)//кнопка "Сохранить изменения"
        {
            try
            {
                dataadapter_tbl_staff.Update((DataTable)dataGridView1.DataSource);
                MessageBox.Show("Изменения в базе данных выполнены!",
                  "Уведомление о результатах", MessageBoxButtons.OK);
            }
            catch (Exception)
            {
                MessageBox.Show("Изменения в базе данных выполнить не удалось!",
                  "Уведомление о результатах", MessageBoxButtons.OK);
            }
        }
    }

Но опытный Борис Моисеев будет против таких излишеств, он обойдётся следующим:

    public partial class Frm_ref_staff : Form
    {
        public Frm_ref_staff()
        {
            InitializeComponent();
        }

        private void Frm_ref_staff_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "dataSet_DBGIS_ASU.Tbl_officer". При необходимости она может быть перемещена или удалена.
            this.tbl_officerTableAdapter.Fill(this.dataSet_DBGIS_ASU.Tbl_officer);
        }

        private void Frm_ref_staff_FormClosed(object sender, FormClosedEventArgs e)
        {

            ((Frm_VodoCheb)this.MdiParent).staffToolStripMenuItem.Visible = true;
        }

        private void button1_Click(object sender, EventArgs e)//кнопка "Сохранить изменения"
        {
            try
            {
                this.tbl_officerTableAdapter.Update(this.dataSet_DBGIS_ASU.Tbl_officer);
                MessageBox.Show("Изменения в базе данных выполнены!",
                  "Уведомление о результатах", MessageBoxButtons.OK);
            }
            catch (Exception)
            {
                MessageBox.Show("Изменения в базе данных выполнить не удалось!",
                  "Уведомление о результатах", MessageBoxButtons.OK);
            }
        }
    }

Комментариев нет:

Отправить комментарий