Здравствуйте.
Имеется БД 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;
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Допустим, у меня есть скрипт, и я хочу что бы этот скрипт активировался в другом скрипте, как мне это сделать? Заранее спасибо!
Допустим, есть строка s, ее длина - 2 символаКогда я пишу:
Имеется некоторый единичный вектор, который представляет собой координату в сферическом пространствеНеобходимо получить из него 4 вектора...
Есть шаблон документа, в котором есть таблица, но при необходимости требуется добавить новую строку в таблице, добавилНО как обозначить в таблице...