вопрос по DataView
От: HAL707  
Дата: 08.03.07 17:34
Оценка:
Доброго всем времени суток.

Есть такой вопрос:
Можно ли сделать следующее:

Если есть 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 это сделать в принципе невозможно?

Спасибо.
Re: вопрос по DataView
От: KlimovS  
Дата: 08.03.07 20:19
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.