Глюк при добавлении строк в БД Access - C#

204
13 марта 2018, 00:05

Здравствуйте.
Имеется БД Access из двух связанных таблиц.
Задача проста: добавить новую строку в бд.
Обработчики buttonAddMainTable_Click и buttonAddSecondTable_Click написаны вроде бы правильно, но происходит не понятный глюк: перед тем как добавить новую строку и записать в неё данные из текстбоксов, текущая строка (последняя в списке) заполняется данными предназначенными для новой строки, и только после этого происходит добавление новой строки.
Подскажите пожалуйста, где я накосячил? Из-за чего происходит редактирование текущей строки перед добавлением новой и как это побороть?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;    
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace v1._0
{
    public partial class Form6DB : Form
{
    public Form6DB()
    {
        InitializeComponent();
    }
    private void Form6DB_Load(object sender, EventArgs e)
    {
        his.name_FirmTableAdapter.Fill(this.dataBaseMDBDataSet.Name_Firm);
        this.nameFirmBindingSource.DataSource = this.dataBaseMDBDataSet.Name_Firm;//----Главная таблица
        this.model_ParamTableAdapter.Fill(this.dataBaseMDBDataSet._Model_Param);
        this.nameFirmModelParamBindingSource.DataSource = this.nameFirmBindingSource;//----Вторая таблица связанная с главной
    }
    //----Кнопка сохранения данных для главной таблицы
    private void buttonSaveMainTable_Click(object sender, EventArgs e)
    {
        try
        {
            buttonNewMainTable.Enabled = true;
            buttonDeleteMainTable.Enabled = true;
            AuxiliaryCl ME = new AuxiliaryCl();
            if (textBoxNameFirm.Text != ""
                && textBoxOther.Text != "")
            {
                nameFirmBindingSource.EndEdit();
                name_FirmTableAdapter.Update(dataBaseMDBDataSet.Name_Firm);
                nameFirmModelParamBindingSource.EndEdit();
                model_ParamTableAdapter.Update(dataBaseMDBDataSet._Model_Param);
                panel1.Enabled = false;  
            }
            else
            {
                ME.MarginError();
            }                              
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            nameFirmBindingSource.ResetBindings(false);
        }
    }
    //----Кнопка сохранения данных для второй таблицы
    private void buttonSaveSecondTable_Click(object sender, EventArgs e)
    {
        try
        {
            buttonNewSecondTable.Enabled = true;
            buttonDeleteSecondTable.Enabled = true;
            AuxiliaryCl ME = new AuxiliaryCl();
            if (textBoxCodeFirm.Text != ""
                && textBoxModel.Text != ""
                && textBoxDiam.Text != ""
                && textBoxProiz.Text != ""
                && textBoxQuanGate.Text != ""
                && textBoxMaxRot.Text != ""
                && textBoxWidthGate.Text != "")
            {
                nameFirmModelParamBindingSource.EndEdit();
                model_ParamTableAdapter.Update(dataBaseMDBDataSet._Model_Param);
                nameFirmBindingSource.EndEdit();
                name_FirmTableAdapter.Update(dataBaseMDBDataSet.Name_Firm);                
                panel2.Enabled = false;
            }
            else
            {
                ME.MarginError();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            nameFirmModelParamBindingSource.ResetBindings(false);
        }
    }
    private void buttonNewMainTable_Click(object sender, EventArgs e)
    {
        nameFirmBindingSource.MoveLast();
        panel1.Enabled = true;
        buttonDeleteMainTable.Enabled = false;
        buttonSaveMainTable.Enabled = false;
        buttonEditMainTable.Enabled = false;
        buttonAddMainTable.Enabled = true;
        textBoxNameFirm.Focus(); 
    }
   //----Кнопка добавления данных в главную таблицу----наблюдается описанный глюк
    private void buttonAddMainTable_Click(object sender, EventArgs e)
    {                                                                                              
        try
        {
            AuxiliaryCl ME = new AuxiliaryCl();
            if (textBoxNameFirm.Text != ""
                && textBoxOther.Text != "")
            {
                DataRow dataRow = dataBaseMDBDataSet.Tables["Name_Firm"].NewRow();
                dataRow["Название"] = textBoxNameFirm.Text;
                dataRow["Страна/Город"] = textBoxOther.Text;
                dataBaseMDBDataSet.Tables["Name_Firm"].Rows.Add(dataRow);
                nameFirmBindingSource.EndEdit();
                name_FirmTableAdapter.Update(dataBaseMDBDataSet.Name_Firm);
                panel1.Enabled = false;
                buttonDeleteMainTable.Enabled = true;
                buttonSaveMainTable.Enabled = true;
                buttonEditMainTable.Enabled = true;
            }
            else
            {
                ME.MarginError();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            nameFirmBindingSource.ResetBindings(false);
        }
    }
    private void buttonNewSecondTable_Click(object sender, EventArgs e)
    {       
        panel2.Enabled = true;
        buttonDeleteSecondTable.Enabled = false;
        buttonSaveSecondTable.Enabled = false;
        buttonEditSecondTable.Enabled = false;
        buttonAddSecondTable.Enabled = true;
        textBoxCodeFirm.Focus();
        textBoxModel.Text = null;
        textBoxCodeFirm.Text = null;
        textBoxProiz.Text = null;
        textBoxDiam.Text = null;
        textBoxMaxRot.Text = null;
        textBoxQuanGate.Text = null;
        textBoxWidthGate.Text = null;
    }
    //----Кнопка добавления данных во вторую таблицу----наблюдается описанный глюк
    private void buttonAddSecondTable_Click(object sender, EventArgs e)
    {                                                                                                  
        try
        {
            nameFirmModelParamBindingSource.MoveLast();
            AuxiliaryCl ME = new AuxiliaryCl();
            if (textBoxCodeFirm.Text != ""
                    && textBoxModel.Text != ""
                    && textBoxDiam.Text != ""
                    && textBoxProiz.Text != ""
                    && textBoxQuanGate.Text != ""
                    && textBoxMaxRot.Text != ""
                    && textBoxWidthGate.Text != "")
            {
                DataRow dataRow = dataBaseMDBDataSet.Tables["Model&Param"].NewRow();                    
                dataRow["Модель"]= textBoxModel.Text;
                dataRow["Код Производителя"] = textBoxCodeFirm.Text;
                dataRow["Производительность тр-ра (кг/об)"] = textBoxProiz.Text;
                dataRow["Диаметр звёздочек тр-ра (м)"] = textBoxDiam.Text;
                dataRow["Макс обороты (об/мин)"] = textBoxMaxRot.Text;
                dataRow["Кол-во шиберов"] = textBoxQuanGate.Text;
                dataRow["Ширина шибера"] = textBoxWidthGate.Text;
                dataBaseMDBDataSet.Tables["Model&Param"].Rows.Add(dataRow);
                nameFirmModelParamBindingSource.EndEdit();
                model_ParamTableAdapter.Update(dataBaseMDBDataSet._Model_Param);
                panel2.Enabled = false;
                buttonDeleteSecondTable.Enabled = true;
                buttonSaveSecondTable.Enabled = true;
                buttonEditSecondTable.Enabled = true;
            }
            else
            {
                ME.MarginError();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
            nameFirmModelParamBindingSource.ResetBindings(false);
        }
    }
    //----Редактирование строк главной таблицы----сохранение осуществляется кнопкой buttonSaveMainTable
    private void buttonEditMainTable_Click(object sender, EventArgs e)
    {                                                             
        panel1.Enabled = true;
        buttonAddMainTable.Enabled = false;
        buttonNewMainTable.Enabled = false;
        buttonDeleteMainTable.Enabled = false;
        textBoxNameFirm.Focus();            
    }
    //----Редактирование строк второй таблицы----сохранение осуществляется кнопкой buttonSaveSecondTable
    private void buttonEditSecondTable_Click(object sender, EventArgs e)
    {                                                             
        panel2.Enabled = true;
        buttonAddSecondTable.Enabled = false;
        buttonNewSecondTable.Enabled = false;
        buttonDeleteSecondTable.Enabled = false;
        textBoxCodeFirm.Focus();            
    }
    //----Кнопка удаления строк из главной таблицы
    private void buttonDeleteMainTable_Click(object sender, EventArgs e)
    {
        try
        {
            if (MessageBox.Show("Удалить запись?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                string str;
                str = Convert.ToString(dataGridView1.CurrentRow.Cells[0].Value);//захват значения индекса строки из первой таблицы
                for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (dataGridView1.Rows[i].Cells[0].Value.ToString() == str)
                    {
                        dataBaseMDBDataSet.Name_Firm.Rows[i].Delete();
                        model_ParamTableAdapter.Update(dataBaseMDBDataSet._Model_Param);
                        name_FirmTableAdapter.Update(dataBaseMDBDataSet.Name_Firm);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    //----Кнопка удаления строк из второй таблицы
    private void buttonDeleteSecondTable_Click(object sender, EventArgs e)
    {
        try
        {
            if (MessageBox.Show("Удалить запись?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                nameFirmModelParamBindingSource.RemoveCurrent();
                model_ParamTableAdapter.Update(dataBaseMDBDataSet._Model_Param);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
   //----Кнопка отмены редактирования строк главной таблицы
    private void buttonCanselMainTable_Click(object sender, EventArgs e)
    {
        nameFirmBindingSource.CancelEdit();
        nameFirmBindingSource.ResetBindings(false);         
        panel1.Enabled = false;
        buttonEditMainTable.Enabled = true;
        buttonDeleteMainTable.Enabled = true;
        buttonSaveMainTable.Enabled = true;
        buttonNewMainTable.Enabled = true;
    }
    //----Кнопка отмены редактирования строк второй таблицы
    private void buttonCanselSecondTable_Click(object sender, EventArgs e)
    {
        nameFirmModelParamBindingSource.CancelEdit();
        nameFirmModelParamBindingSource.ResetBindings(false);
        panel2.Enabled = false;
        buttonEditSecondTable.Enabled = true;
        buttonDeleteSecondTable.Enabled = true;
        buttonSaveSecondTable.Enabled = true;
        buttonNewSecondTable.Enabled = true;           
    }        
}
}
READ ALSO
Активация скрипта в другом скрипте

Активация скрипта в другом скрипте

Допустим, у меня есть скрипт, и я хочу что бы этот скрипт активировался в другом скрипте, как мне это сделать? Заранее спасибо!

180
Ошибка при удалении символов из строки

Ошибка при удалении символов из строки

Допустим, есть строка s, ее длина - 2 символаКогда я пишу:

309
Unity3D: Отклонить вектор на N градусов

Unity3D: Отклонить вектор на N градусов

Имеется некоторый единичный вектор, который представляет собой координату в сферическом пространствеНеобходимо получить из него 4 вектора...

192
Как работать с таблицей в MSWord из C#?

Как работать с таблицей в MSWord из C#?

Есть шаблон документа, в котором есть таблица, но при необходимости требуется добавить новую строку в таблице, добавилНО как обозначить в таблице...

195