Вывод 2-х связных таблиц в один DataGridView
Инструкции в интернете есть, но сабж не решается. Привожу код, а потом свои предположения.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .csharp.geshi_code {font-family:monospace;} .csharp.geshi_code .imp {font-weight: bold; color: red;} .csharp.geshi_code .kw1 {color: #0600FF;} .csharp.geshi_code .kw2 {color: #FF8000; font-weight: bold;} .csharp.geshi_code .kw3 {color: #008000;} .csharp.geshi_code .kw4 {color: #FF0000;} .csharp.geshi_code .kw5 {color: #000000;} .csharp.geshi_code .co1 {color: #008080; font-style: italic;} .csharp.geshi_code .co2 {color: #008080;} .csharp.geshi_code .co3 {color: #008080;} .csharp.geshi_code .coMULTI {color: #008080; font-style: italic;} .csharp.geshi_code .es0 {color: #008080; font-weight: bold;} .csharp.geshi_code .es_h {color: #008080; font-weight: bold;} .csharp.geshi_code .br0 {color: #000000;} .csharp.geshi_code .sy0 {color: #008000;} .csharp.geshi_code .st0 {color: #666666;} .csharp.geshi_code .st_h {color: #666666;} .csharp.geshi_code .nu0 {color: #FF0000;} .csharp.geshi_code .me1 {color: #0000FF;} .csharp.geshi_code .me2 {color: #0000FF;} .csharp.geshi_code span.xtra { display:block; }
command.Connection = connection;
command.CommandText = "select * from sections";
adapter.SelectCommand = command;
connection.Open();
adapter.TableMappings.Add("Table", "sections");
adapter.Fill(ds);
command2.Connection = connection;
command2.CommandText = "select * from employers";
adapter1.SelectCommand = command2;
adapter1.TableMappings.Add("Table", "employers");
adapter1.Fill(ds);
DataColumn dc1 = new DataColumn();
DataColumn dc2 = new DataColumn();
dc1 = ds.Tables["sections"].Columns["Id_section"];
dc2 = ds.Tables["employers"].Columns["Id_section"];
DataRelation relat = new DataRelation("bum", dc1, dc2);
ds.Relations.Add(relat);
DataViewManager dsview = ds.DefaultViewManager;
dataGridView1.DataSource = dsview;
dataGridView1.DataMember = "sections";
connection.Close();
Этот код выполняется в конструкторе формы. Объекты соединения и команд создаются. База данных Access.
Результат выполнения кода - записи только из таблицы sections.
Быть может таблицы связаны, но DataGridView их не отображает? Может быть нужно активировать отображение связанных таблиц? Если нет, то вообще почему код не выполняет поставленную задачу?
Спасибо!
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .csharp.geshi_code {font-family:monospace;} .csharp.geshi_code .imp {font-weight: bold; color: red;} .csharp.geshi_code .kw1 {color: #0600FF;} .csharp.geshi_code .kw2 {color: #FF8000; font-weight: bold;} .csharp.geshi_code .kw3 {color: #008000;} .csharp.geshi_code .kw4 {color: #FF0000;} .csharp.geshi_code .kw5 {color: #000000;} .csharp.geshi_code .co1 {color: #008080; font-style: italic;} .csharp.geshi_code .co2 {color: #008080;} .csharp.geshi_code .co3 {color: #008080;} .csharp.geshi_code .coMULTI {color: #008080; font-style: italic;} .csharp.geshi_code .es0 {color: #008080; font-weight: bold;} .csharp.geshi_code .es_h {color: #008080; font-weight: bold;} .csharp.geshi_code .br0 {color: #000000;} .csharp.geshi_code .sy0 {color: #008000;} .csharp.geshi_code .st0 {color: #666666;} .csharp.geshi_code .st_h {color: #666666;} .csharp.geshi_code .nu0 {color: #FF0000;} .csharp.geshi_code .me1 {color: #0000FF;} .csharp.geshi_code .me2 {color: #0000FF;} .csharp.geshi_code span.xtra { display:block; }
command.Connection = connection;
command.CommandText = "select * from sections";
adapter.SelectCommand = command;
connection.Open();
adapter.TableMappings.Add("Table", "sections");
adapter.Fill(ds);
command2.Connection = connection;
command2.CommandText = "select * from employers";
adapter1.SelectCommand = command2;
adapter1.TableMappings.Add("Table", "employers");
adapter1.Fill(ds);
DataColumn dc1 = new DataColumn();
DataColumn dc2 = new DataColumn();
dc1 = ds.Tables["sections"].Columns["Id_section"];
dc2 = ds.Tables["employers"].Columns["Id_section"];
DataRelation relat = new DataRelation("bum", dc1, dc2);
ds.Relations.Add(relat);
DataViewManager dsview = ds.DefaultViewManager;
dataGridView1.DataSource = dsview;
dataGridView1.DataMember = "sections";
connection.Close();
Этот код выполняется в конструкторе формы. Объекты соединения и команд создаются. База данных Access.
Результат выполнения кода - записи только из таблицы sections.
Быть может таблицы связаны, но DataGridView их не отображает? Может быть нужно активировать отображение связанных таблиц? Если нет, то вообще почему код не выполняет поставленную задачу?
Спасибо!
1 ответов
BindingSource bsStuds = new BindingSource();
BindingSource bsExams = new BindingSource();
private void Form1_Load(object sender, EventArgs e)
{
string sqlStuds = "select * from Studs";
string sqlExams = "select * from Exams";
OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=StudentsDB.mdb");
DataSet ds = new DataSet();
OleDbDataAdapter daStuds = new OleDbDataAdapter(sqlStuds, cn);
daStuds.Fill(ds, "Studs");
OleDbDataAdapter daExams = new OleDbDataAdapter(sqlExams, cn);
daExams.Fill(ds, "Exams");
DataRelation relation = new DataRelation("StudsExams", ds.Tables["Studs"].Columns["ID"], ds.Tables["Exams"].Columns["StudID"]);
ds.Relations.Add(relation);
bsStuds.DataSource = ds;
bsStuds.DataMember = "Studs";
bsExams.DataSource = bsStuds;
bsExams.DataMember = "StudsExams";
dataGridView1.DataSource = bsStuds;
dataGridView2.DataSource = bsExams;
}
Таблицы: