Доброго всем времени суток.
Есть такой вопрос:
Можно ли сделать следующее:
Если есть 2 таблицы — Клиенты (id, client_name) и Заказы (id, client_id, ordre_name ),
то можно ли отобразить с использованием DataView тех клиентов, у которых имеются заказы?
т.е. написать что-то вроде этого:
DataView dw = new DataView();
dw.Table = dataSet.Clients;
dw.RowFilter = — что тут необходимо написать?
(если бы был запрос, то я бы просто написал select Clients.* where Clients.id = Orders.client_id а тут так
и сяк пробывал — не работает)
Или с использованием DataView это сделать в принципе невозможно?
Спасибо.
Здравствуйте, HAL707, Вы писали:
HAL>Доброго всем времени суток.
HAL>Есть такой вопрос:
HAL>Можно ли сделать следующее:
HAL>Если есть 2 таблицы — Клиенты (id, client_name) и Заказы (id, client_id, ordre_name ),
HAL>то можно ли отобразить с использованием DataView тех клиентов, у которых имеются заказы?
HAL>т.е. написать что-то вроде этого:
HAL>DataView dw = new DataView();
HAL>dw.Table = dataSet.Clients;
HAL>dw.RowFilter = — что тут необходимо написать?
HAL>(если бы был запрос, то я бы просто написал select Clients.* where Clients.id = Orders.client_id а тут так
HAL>и сяк пробывал — не работает)
Во как:
// таблица клиентов
DTClients = new DataTable("Clients");
// Создаем объекты DataColumn
DataColumn [] ADCidС = new DataColumn [1]; // это ключевые поля
DataColumn DCidС = new DataColumn("id"); // колонка id
ADCidС [0] = DCidС; // ключевое поле
DCidС.AllowDBNull = false; // id не может быть null
DCidC.DataType = System.Type.GetType("System.Int32");
DataColumn DCClient_name = new DataColumn("Client_name"); // колонка Client_name
DCClient_name.AllowDBNull = false; // Client_name не может быть null
// Добавляем объекты DataColumn в DataTable
DTClients.Columns.Add(DCidС); // вставили колонку
DTClients.Columns.Add(DCClient_name); // вставили колонку
DTClients.PrimaryKey = ADCidС; // назначили ключ таблице
// таблица заказов
DTOrder = new DataTable("Order");
// Создаем объекты DataColumn
DataColumn [] ADCidO = new DataColumn [1]; // это ключевые поля
DataColumn DCidO = new DataColumn("id"); // колонка id
ADCidO [0] = DCidO; // ключевое поле
DCidO.AllowDBNull = false; // id не может быть null
DCidO.DataType = System.Type.GetType("System.Int32");
DataColumn DCClient_id = new DataColumn("Client_id"); // колонка Client_id
DCClient_id.AllowDBNull = false; // Client_id не может быть null
DCClient_id.DataType = System.Type.GetType("System.Int32");
DataColumn DCOrder_name = new DataColumn("Order_name"); // колонка Order_name
DCOrder_name.AllowDBNull = false; // Order_name не может быть null
// Добавляем объекты DataColumn в DataTable
DTOrder.Columns.Add(DCidO); // вставили колонку
DTOrder.Columns.Add(DCClient_id); // вставили колонку
DTOrder.Columns.Add(DCOrder_name); // вставили колонку
DTOrder.PrimaryKey = ADCidO; // назначили ключ таблице
// создаем связь:
DataSet DS = new DataSet ("Rel");
// Добавляем таблицы
DS.Tables.Add(DTClients);
DS.Tables.Add(DTOrder);
// Моделируем отношения
DataColumn[] parentColumns = new DataColumn[1],
childColumns = new DataColumn[1];
parentColumns[0] = DTClients.Columns["id"];
childColumns[0] = DTOrders.Columns["id"];
DataRelation dr = new DataRelation("Relat", parentColumns, childColumns);
DS.Relations.Add(dr);
DataView dw = new DataView(DTClients);
dw.RowFilter = "Count(Child.id)>0"; // вот оно счастье!!!
// заполняем данными, выводим!!! (смотрим в отладке - все работает)
(Смотри в MSDN:
DataSet Class
DataTable Class
DataView Class
DataView.RowFilter Property, синтаксис смотри по DataColumn.Expression Property)
Выгода из этого сомнительная. Зачем тебе в Clients не отображаемые записи? И расчет вспомогательного поля? Проще сделать выборку из базы только необходимых данных.
А я месяц назад не смог это решить!!
Сейчас стал объяснять, почему это сделать нельзя
и нашел как сделать!!!
Читай документацию — это рулеззззз!!!!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>