Доброго времени суток.
Есть две таблицы: Писатели(ИД_писателя, Фамилия) --ИД_писателя = ИД_автора--> Книги(ИД_книги, ИД_автора, Название), отношение один писатель ко многим книгам (прошу не критиковать логическую структуру базы - просто сочинил для топика аналог реальной БД). В datagridview выводятся книги, хотелось бы в label отображать фамилию писателя.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
private DataSet _dataSet;
private SqlDataAdapter _adapterBooks;
private SqlDataAdapter _adapterWriters;
BindingSource bsBooks;
BindingSource bsWriters;
BindingSource bsAuthors;
DbProviderFactory factory;
private void GetData()
{
_dataSet = new DataSet();
_dataSet.Locale = System.Globalization.CultureInfo.InvariantCulture;
//==================================================================
//создаем адаптеры
//==================================================================
_adapterBooks = new SqlDataAdapter();
_adapterBooks.SelectCommand = new SqlCommand(@"SELECT * FROM Книга", conn);
_adapterWriters = new SqlDataAdapter();
_adapterWriters.SelectCommand = new SqlCommand(@"SELECT * FROM Писатели", conn);
//-------------создаем адаптеры
//==================================================================
//заполняем датасет и создаем отношения
//==================================================================
_adapterBooks.Fill(_dataSet, "Книги");
_adapterBooks.FillSchema(_dataSet.Tables["Книги"], SchemaType.Source);
_adapterWriters.Fill(_dataSet, "Писатели");
_adapterWriters.FillSchema(_dataSet.Tables["Писатели"], SchemaType.Source);
relation = _dataSet.Relations.Add("Авторы",
_dataSet.Tables["Писатели"].Columns["ИД_писателя"],
_dataSet.Tables["Книги"].Columns["ИД_автора"]);
//------------заполняем датасет и создаем отношения
//==================================================================
//устанавливаем bindings и SQL-команды для вкладки Главное
//==================================================================
bsBooks = new BindingSource(_dataSet, "Книги");
bsWriters = new BindingSource(_dataSet, "Писатели");
bsAuthors = new BindingSource(bsWriters, "Авторы");
tbName.DataBindings.Add(new Binding("Text", bsBooks, "Название", true));//textBox с названием книги
lblAuthor.DataBindings.Add(new Binding("Text", bsAuthors, "Фамилия"));//label с фио автора
DbCommandBuilder builderBooks = factory.CreateCommandBuilder();
builderBooks.DataAdapter = _adapterBooks;
_adapterBooks.InsertCommand = builderBooks.GetInsertCommand();
_adapterBooks.UpdateCommand = builderBooks.GetUpdateCommand();
_adapterBooks.DeleteCommand = builderBooks.GetDeleteCommand();
...
}
Логично сыпет ошибку, что свойство Фамилия не найдено, т.к. в bsAuthors только ИД_писателя и автора. И вопрос в том, как вывести в label фамилию писателя. При этом не хотелось бы расширять скрипт для _adapterBooks, т.к. не получится воспользоваться DbCommandBuilder