![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Доброго времени суток!
У меня имеется три набора данных связанных по связи мастер-деталь последовательно: организации-объекты-здания, соответствующие таблицы данных связаны по определенным ключевым полям. Данные из этих таблиц размещены в контроле, унаследованном от TreeView согласно их уровню в иерархической структуре. Для связи контролов и данных созданы три bindingsource (назовем их условно А, Б и В) для каждой таблицы данных. Так вот при построении дерева курсор в А установлен на первой записи, в Б и В данные отфильтрованы в соответствии с таблицей А. Если начать перебирать все записи в табл. А и во вложенных циклах данные табл Б и В то, в связи с тем, что А, Б и В связаны с другими контролами, заметно увеличиватся время добавления ветвей дерева. Подскажите пожалуйста, как отключить контролы от bindingsource для ускорения заполнения дерева? Или может быть можно перебрать строки подчиненных таблиц не меняя позиции соответствующих мастер таблиц. Вот код, при помощи которого я строю дерево:
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Видимо так же как и подключил - при помощи свойства DataSource. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Насколько я понял, то нужно перебирать все контролы и указывать для каждого BindingSource=Nothing.
Если так, то уменя получается это около 60-ти контролов... Как быть перебирать их вручную? И второй вопрос из конструктора дерева не видно какие это контролы. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
barulya, я из кода ничего не понял, да это и не мудрено, это всё-таки фрагмент. К тому же фрагмент ссылающийся на множество объектов, объявленных за пределами приведённого фрагмента. Если неясно какие именно контролы надо отвязывать от источника данных, тогда не знаю что тут можно сделать, но если всё-таки есть способ их определить, то можно загнать их в коллекцию и в отдельном методе перебирать эту коллекцию и выполнять над ними нужные действия.
Но тут есть другой вопрос, а почему на время построения дерева не отключить сами байндингсорсы от таблиц? В конце концов отбор данных и вручную выполнить несложно. При помощи тех же линк-запросов например. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Так, если отключить байдингсорсы от таблиц, данные также будут доступны?
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Дык смотря где. К таблицам ты имеешь и прямой доступ, а в чём проблема то? Байндингсорсы нужны для управления привязкой данных к контролам, а сами данные доступны и безо всяких байндингсорсов. Мало того, при необходимости можно и к контролам подключить таблицу непосредственно, просто тогда нельзя будет некоторые действия выполнять, типа фильтрации данных, синхронизации перемещения указателя и прочего. Если данные просто надо использовать для построения дерева, то байндингсорсы тут вообще не при чём. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
А с линк-запросами не работал, попробую в этом направлении, спасибо. Я пытался SuspendBinding и ResumeBinding использовать перед перебором и после него соответственно. Но при этом обратиться к текущей записи было не возможно, и не изменялся Position.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
barulya, не видя задачи целиком сложно что-либо советовать. Построение дерева по данным представленным в виде линейных списков - задача не такая уж и сложная, но при чём тут связывание с данными я честно говоря не вполне врубился, так что не знаю, может я тебя и не туда направил
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Собственно цель, которю я преследовал, ускорение создания дерева, в списке около 3 тыс. орг-ций, чуть больше объектов и раза в полтора больше зданий. Я делал прямым обращением к дататейбл, но после перехода к байндингсорс заметил, что процесс намного быстрее происходит. Но проблема состояла в том, что я мог загрузить только организации, и только в первую организацию добавлялись объекты, и в свою очередь в первый объект добавлялись здания. Т.е. в байдингсорсах объектов и зданий курсор записи фильтровались по курсору байдингсорса организаций. И еще работать с данными придется и другим частям приложения и отследить в каком из процессов были изменены, добавлены или удалены данные (синхронизировать) будет сложнее. По событиям байдингсорсов это на мой взгляд будет проще. или иначе каждый раз перезагружать всю структуру из базы данных.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
А как вся система связана с контролами, подключенными к байдингсорсам и которые тормозят загрузку?
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Не понял вопроса?
Это сообщение отредактировал(а) barulya - 14.11.2009, 10:40 |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Ну ты пишешь
Вот я и спрашиваю: "Какие контролы и каким образом они влияют на заполнение дерева?". -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
Среди забинденных контролов есть текстбоксы, комбобоксы, чекбоксы, а также таблица "объекты" связана с 4-мя таблицами по приципу мастер-деталь, а таблица "здания" имеет 8 связанных таблиц по томуже принципу, которые в свою очередь забиндены с DataGridView. И как следствие тормозит команда bindingsource.position при его смене.
Чтобы иметь общее представление о количестве данных прикрепляю картинку: Это сообщение отредактировал(а) barulya - 14.11.2009, 12:04 Присоединённый файл ( Кол-во скачиваний: 6 )
11.jpg 148,17 Kb |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
barulya, я понимаю, что у тебя какая-то сложная структура данных и всё такое, но я уже сколько бьюсь никак не могу добиться ответа на вопрос, как байндингсорсы связаны с сабжем. В заголовке темы и первом посте речь шла о проблемах с формированием дерева, теперь ты говоришь о тормозах при перемещении указателя. Из этого я делаю вывод, что данные для формирования дерева ты вытаскиваешь то ли из грида, то ли из ещё какого-то контрола, список элементов в котором фильтруется при помощи байндингсорса. Если проблема именно в этом, то я уже ответил - строй дерево по данным из таблиц, а не из контролов. Если я опять тебя не понял, значит видно не судьба.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| barulya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 22.10.2009 Репутация: нет Всего: нет |
diadiavova,
Я вытягивал данные напрямую из таблиц используя байдингсорсы, но при этом в байдингсорсах объектов и зданий в свойствах датасорс указывал соответствующую родительскую таблицу, а в датамембер указывал связи с дочерними таблицами. Заполнял дерево при возникновении событий ListChanged со значение Reset каждого байдингсорса внутры конструктора дерева. т.е. я его заполнял не из внешнего кода, а так сказать изнутри перебирая последовательно по иерархии строки в каждом списке. И перебирая соответственно каждые строки у меня происходили множественные фильтрования списков и привязки к контролам. Я делал это для того, чтобы быстрее и удобнее синхронизировать изменение положения курсора в дереве и байдингсорсах (используя значения индексов элементов). Но к сожалению я пошел по неверному пути. После того как в байдингсорсах в значении свойств датасорс я указал свой датасет, а в значениях датамембер я указал соответствующие таблицы. Теперь мне стали доступны все элементы списков подчиненных таблиц без фильтрования, что дает мне возможность заполнения дерева. Просто при выборе элемента возвращается его ИД и по нему используя поиск устанавливается курсор на нужную запись в байдингсорсах. Так что проблема я думаю решена. Спасибо за внимание и уделенное время. |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |