Обновление дочерней таблицы
Поиском пользовался - без толку, хотя может плохо искал...
Собственно сам вопрос:
Есть БД, в ней 2 связанные таблицы. Привязка идет по полю "Код". При попытке сохранить данные они падают только в родительскую таблицу не сохраняясь в дочерней.
Дальше код:
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;
using System.Data.SqlClient;
using System.Data.Common;
namespace rppvv
{
public partial class Form2 : Form
{
string rppConn = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\rppv.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
string avtoSelect = "SELECT * From avto";
string zpSelect = "SELECT * From zp";
SqlDataAdapter avtoAdapter;
SqlDataAdapter zpAdapter;
DataSet rppDataSet;
SqlCommandBuilder avtoBuild;
SqlCommandBuilder zpBuild;
BindingSource bs = new BindingSource();
BindingSource zs = new BindingSource();
int i;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
//Подключение к БД;
avtoAdapter = new SqlDataAdapter(avtoSelect, rppConn);
zpAdapter = new SqlDataAdapter(zpSelect, rppConn);
//Создание CommandBuilder
avtoBuild = new SqlCommandBuilder(avtoAdapter);
zpBuild = new SqlCommandBuilder(zpAdapter);
//Создание DataSet и заполнение его данными;
rppDataSet = new DataSet();
avtoAdapter.Fill(rppDataSet, "avto");
zpAdapter.Fill(rppDataSet, "zp");
//Создание связи между таблицами
DataRelation dr = new DataRelation("FK_zp_avto", rppDataSet.Tables["avto"].Columns["Код"], rppDataSet.Tables["zp"].Columns["Код"], true);
rppDataSet.Relations.Add(dr);
//Создание BindingSource
bs.DataSource = rppDataSet;
bs.DataMember = "avto";
zs.DataSource = bs;
zs.DataMember = "FK_zp_avto";
//Привязка данных к элементам формы;
lsAvto.DataSource = bs;
lsAvto.DisplayMember = "Тип";
lsAvto.ValueMember = "Код";
txtCode.DataBindings.Add("Text", bs, "Код");
txtType.DataBindings.Add("Text", bs, "Тип");
txtCapacity.DataBindings.Add("Text", bs, "Грузоподъемность");
txtSize.DataBindings.Add("Text", bs, "Объем");
txtFuel.DataBindings.Add("Text", bs, "Расход");
txtPorter.DataBindings.Add("Text", zs, "Грузчик");
txtDriver.DataBindings.Add("Text", zs, "Водитель");
txtExp.DataBindings.Add("Text", zs, "Экспедитор");
txtCodeZp.DataBindings.Add("Text", zs, "Код");
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
//Сохранение в БД
private void btnSave_Click(object sender, EventArgs e)
{
//Проверка корректности вводимых значений
try
{
Convert.ToString(txtType.Text);
Convert.ToDouble(txtCapacity.Text);
Convert.ToDouble(txtSize.Text);
Convert.ToDouble(txtFuel.Text);
//Обновление БД;
bs.EndEdit();
zs.EndEdit();
avtoAdapter.Update(rppDataSet.Tables["avto"]);
zpAdapter.Update(rppDataSet.Tables["zp"]);
MessageBox.Show("База данных обновлена!");
}
catch
{
MessageBox.Show("Введите корректные данные!");
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
Convert.ToString(txtType.Text);
Convert.ToDouble(txtCapacity.Text);
Convert.ToDouble(txtSize.Text);
Convert.ToDouble(txtFuel.Text);
lsAvto.SelectedIndex = 0;
i = lsAvto.Items.Count;
DataRow newRow = rppDataSet.Tables["avto"].NewRow();
DataRow zpRow = rppDataSet.Tables["zp"].NewRow();
rppDataSet.Tables["avto"].Rows.Add(newRow);
rppDataSet.Tables["zp"].Rows.Add(zpRow);
lsAvto.SelectedIndex = i;
txtCode.Text = Convert.ToString(i + 1);
txtCodeZp.Text = txtCode.Text;
}
catch
{
MessageBox.Show("Введите корректные данные!!!");
}
}
private void btnDel_Click(object sender, EventArgs e)
{
int k = lsAvto.SelectedIndex;
rppDataSet.Tables["avto"].Rows[k].Delete();
}
}
}
В чем причина, подскажите кто чем может...
PS: не в тот подраздел тему кинул - пардоньте...
rppDataSet.Tables["avto"].Columns["Код"].AutoIncrement = true;
rppDataSet.Tables["avto"].Columns["Код"].AutoIncrementSeed = 1;
rppDataSet.Tables["avto"].Columns["Код"].AutoIncrementStep = 1;
rppDataSet.Tables["zp"].Columns["Код"].AutoIncrement = true;
rppDataSet.Tables["zp"].Columns["Код"].AutoIncrementSeed = 1;
rppDataSet.Tables["zp"].Columns["Код"].AutoIncrementStep = 1;
И все пошло...