С биндингом разобрался давно (ошибка была глупейшая), но все равно спасибо за доп. инфу по нему - как говорится, информации много не бывает...
А по поводу того, уверен ли я что возвращает dSet - ну 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;
using System.Data.OleDb;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
string Path = @"H:\!Разное\!С диска С\My Documents\Visual Studio 2008\Projects\WindowsFormsApplication2\WindowsFormsApplication2\bin\Debug\empty.mdb";
DataSet dSet = new DataSet();
OleDbDataAdapter dAdapter = null;
public Form1()
{
InitializeComponent();
SearchBtn.Visible = false;
textBox3.Visible = false;
textBox2.Visible = false;
textBox1.Visible = false;
поИмениToolStripMenuItem.Checked = false;
}
private void Form1_Load(object sender, EventArgs e)
{
LoadBase(Path);
dataGridView1.Visible = true;
dataGridView2.Visible = true;
}
private DataSet LoadBase(string Path)
{
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;" + "data source=" + Path;
OleDbConnection BaseConnect = new OleDbConnection(connectionString);
string baseerrtxt = "";
DataSet dSet = new DataSet();
try
{
BaseConnect.Open();
baseerrtxt = "" + BaseConnect.State;
if (baseerrtxt == "Open")
{
//MessageBox.Show("База открыта");
textBox3.Text = "" + baseerrtxt;
}
}
catch (OleDbException ex)
{
MessageBox.Show("Не удалось открыть базу!" + "\n" + ex.Message);
baseerrtxt = "" + BaseConnect.State;
textBox3.Text = "" + baseerrtxt;
}
if ((поИмениToolStripMenuItem.Checked == false) && (запросSQLToolStripMenuItem.Checked == false)) //вывод исходной базы
{
string SelectCmd = "SELECT * FROM People";
dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
dAdapter.Fill(dSet, "People");
SelectCmd = "SELECT * FROM Stuff";
dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
dAdapter.Fill(dSet, "Stuff");
dSet.Relations.Add("nRelation", dSet.Tables["People"].Columns["ФИО"], dSet.Tables["Stuff"].Columns["ФИО"]);
dataGridView1.DataSource = dSet;
dataGridView1.DataMember = "People";
dataGridView2.DataSource = dSet;
dataGridView2.DataMember = "People.nRelation";
}
else if (поИмениToolStripMenuItem.Checked == true) //поиск в базе по ФИО сотрудника
{
string emp = textBox1.Text;
if (emp != "")
{
string SelectCmd = "SELECT * FROM People WHERE ФИО = " + "'" + @emp + "'";
dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
dAdapter.Fill(dSet, "People");
SelectCmd = "SELECT * FROM Stuff WHERE ФИО = " + "'" + @emp + "'";
dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
dAdapter.Fill(dSet, "Stuff");
dSet.Relations.Add("nRelation", dSet.Tables["People"].Columns["ФИО"], dSet.Tables["Stuff"].Columns["ФИО"]);
dataGridView1.DataSource = dSet;
dataGridView1.DataMember = "People";
dataGridView2.DataSource = dSet;
dataGridView2.DataMember = "People.nRelation";
}
else if (emp == "")
{
MessageBox.Show("Введите ФИО");
}
}
else if (запросSQLToolStripMenuItem.Checked == true) //отображение данных выданных с помощью SELECT-запроса
{
string SelectCmd = textBox2.Text;
try
{
dAdapter = new OleDbDataAdapter(SelectCmd, BaseConnect);
dSet.EnforceConstraints = false;
dAdapter.Fill(dSet, "People");
dAdapter.Fill(dSet, "Stuff");
dataGridView1.DataSource = dSet;
dataGridView1.DataMember = "People";
BaseConnect.Close();
}
catch (OleDbException)
{
MessageBox.Show("Введен неправильный SQL-запрос!","Возможна ошибка");
}
}
return dSet;
}
private void button1_Click(object sender, EventArgs e)
{
if (запросSQLToolStripMenuItem.Checked == true)
{
LoadBase(Path);
}
else if (поИмениToolStripMenuItem.Checked == true)
{
LoadBase(Path);
}
}
private void поИмениToolStripMenuItem_Click(object sender, EventArgs e)
{
textBox2.Visible = false;
dataGridView2.Visible = true;
SearchBtn.SetBounds(120, SearchBtn.Location.Y, SearchBtn.Width, SearchBtn.Height);
запросSQLToolStripMenuItem.Checked = false;
поИмениToolStripMenuItem.Checked = true;
выводБазыToolStripMenuItem.Checked = false;
SearchBtn.Visible = true;
textBox1.Visible = true;
textBox1.BringToFront();
}
private void запросSQLToolStripMenuItem_Click(object sender, EventArgs e)
{
SearchBtn.Visible = true;
SearchBtn.SetBounds(623, SearchBtn.Location.Y, SearchBtn.Width, SearchBtn.Height);
поИмениToolStripMenuItem.Checked = false;
выводБазыToolStripMenuItem.Checked = false;
textBox1.Visible = false;
dataGridView2.Visible = false;
textBox2.Visible = true;
запросSQLToolStripMenuItem.Checked = true;
}
private void выводБазыToolStripMenuItem_Click(object sender, EventArgs e)
{
dataGridView1.Visible = true;
поИмениToolStripMenuItem.Checked = false;
запросSQLToolStripMenuItem.Checked = false;
выводБазыToolStripMenuItem.Checked = true;
textBox1.Visible = false;
textBox2.Visible = false;
SearchBtn.Visible = false;
dataGridView2.Visible = true;
LoadBase(Path);
}
private void UpdateDB(string Path) //корявая попытка апдейта исходной базы
{
dAdapter.Update(dSet, "People");
dAdapter.Update(dSet, "Stuff");
}
private void Form1_Closing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Сохранить изменения?", "Сохранение", MessageBoxButtons.YesNo) == DialogResult.OK)
{
UpdateDB(Path);
}
}
}
}
собственно после написанного вами:
не вижу у тебя наличие //create a DataTable to hold the query resultsDataTable dTable = new DataTable();//fill the DataTabledAdapter.Fill(dTable);
появляется вопрос: обязательно ли работать в данном случае именно с DataTable?