Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Синхронизация двух гридов / 6 сообщений из 6, страница 1 из 1
16.08.2007, 12:49
    #34732114
Neshta.a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух гридов
Столкнулся с такой проблемой - нужно было синхронизировать 2 грида. Тут на форуме я нашел как это сделать (к сожалению эту тему закрыли). Смысл там был в том что типа в датасете указывалась связь между двумя таблицами по ID как Both Relation and Key Constraint (Cascade). Фсе работало отлично пока не понадобилось заполнять главный грид по условию (по дате). И теперь получается что из таблицы с ключом выбирются данные по запросу а со второй (подчиненной) таблицы - не выбираются (если быть точнее при заполнении DataSet1.Table2 - кидает ошибку "Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints."). Если убирать условия выбора с главной таблицы то все ок а с условием не пашет.

Подскажите в чем дело плз. Спасибо.
...
Рейтинг: 0 / 0
16.08.2007, 15:51
    #34732887
Neshta.a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух гридов
я плохо выразил суть проблемы или просто никто не знает?
...
Рейтинг: 0 / 0
16.08.2007, 15:57
    #34732902
Sergey Tokarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух гридов
Дело в том, что в подчиненной странице встречаются записи, внешний ключ которых должен был бы присутствовать в главной таблице, да нет его, потому что он отфильтрован.

Поэтому видиться мне два выхода:
1. Если фильтрация не клиентская (а она у вас сто пудов не клиентская, иначе не было бы ошибки), то добавьте в запрос на выборку записей для подчиненной таблицы те же даты, и фильтруйте в запросе так, чтобы там не встречались записи, которые ссылаются на записи внешней таблицы, которые были отфильтрованы

2. Сделайте клиентскую фильтрацию, если возможно (а скорее всего это невозможно)

ПС. Клиентская фильтрация - это в которая в DataTable.DefaultView.RowFilter
...
Рейтинг: 0 / 0
16.08.2007, 16:24
    #34733009
Neshta.a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух гридов
Sergey Tokarev
1. Если фильтрация не клиентская

дело в том что фильтрации нету вообще - просто тупо в датасете указана связь между этими двумя таблицами, и в подчиненном гриде в datamember указано название этой связи. Если выбирать с подчиненной таблицы данные с такими же датами - то в ней нету поля с датами.
...
Рейтинг: 0 / 0
16.08.2007, 18:05
    #34733403
Sergey Tokarev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух гридов
Хм. Если вы заполняете грид по условию, то есть по дате, то это и есть то, что я имею ввиду, говоря "фильтрация".

Смотрите.

Пусть есть две таблицы

Код: plaintext
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.
CREATE TABLE MainTable 
(
ID int,
Name nvarchar( 50 ),
SomeDate datetime
)

CREATE TABLE ChildTable
(
  ID int,
  MainTableID int, -- Внешний ключ на MainTable.ID
  Name
)

-- Данные выбираются с условием по дате, полученными результатами заполняется грид

SELECT 
  ID,
  Name,
  SomeDate
FROM 
  MainTable
WHERE
 SomeDate BETWEEN @dateStart AND @dateEnd

-- Для подчиненной таблицы нужно выбирать данные так
SELECT
 C.ID,
 C.MainTableID,
 C.Name
FROM
 ChildTable as C
-- Если эту часть убрать, будут возникать ошибки
INNER JOIN MainTable AS M ON M.ID = C.MainTableID
WHERE
  M.SomeDate BETWEEN @dateStart AND @dateEnd
...
Рейтинг: 0 / 0
21.08.2007, 10:47
    #34740809
Neshta.a
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух гридов
Sergey TokarevХм. Если вы заполняете грид по условию, то есть по дате, то это и есть то, что я имею ввиду, говоря "фильтрация".

Смотрите.

Пусть есть две таблицы

Код: plaintext
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.
CREATE TABLE MainTable 
(
ID int,
Name nvarchar( 50 ),
SomeDate datetime
)

CREATE TABLE ChildTable
(
  ID int,
  MainTableID int, -- Внешний ключ на MainTable.ID
  Name
)

-- Данные выбираются с условием по дате, полученными результатами заполняется грид

SELECT 
  ID,
  Name,
  SomeDate
FROM 
  MainTable
WHERE
 SomeDate BETWEEN @dateStart AND @dateEnd

-- Для подчиненной таблицы нужно выбирать данные так
SELECT
 C.ID,
 C.MainTableID,
 C.Name
FROM
 ChildTable as C
-- Если эту часть убрать, будут возникать ошибки
INNER JOIN MainTable AS M ON M.ID = C.MainTableID
WHERE
  M.SomeDate BETWEEN @dateStart AND @dateEnd



Спасибо - помогло!!
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Синхронизация двух гридов / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]