Как "форсировать" DataBinding свойств формы и датасета
От: khippytch  
Дата: 27.04.06 14:38
Оценка:
Добрый день,
возникла следующая проблема:

имеем форму, на которой TabControl (2 закладки) и сплиттер. Хочется сохранять состояние формы между запусками программы (чтоб при следующем запуске она была в том же месте экрана, где её оставили в предыдущем, открыта та же закладка, и сплит в том же положении).
Делаем стандартно — typed dataset DS, в нём таблица — Form:

Left
Top
Width
Height
SplitHeight
TabNum

байндим всё это к соответствующим свойствам формы и контролов на ней (SplitHeight, в частности, к высоте верхнего из контролов, на которые действует сплиттер) — что-то через дизайнер, что-то (например, Left, Тop, Width, Height) — вручную, в конструкторе формы:

DataBindings.Add( "Width", ds, "Form1.Width" );

При запуске программы читаем датасет из файла, при выходе — записываем его туда (предварительно вызвав DataBindings[ 0 ].BindingManagerBase.EndCurrentEdit у формы, чтоб изменения её состояния перенеслись в датасет).

1) Пока файл есть, всё работает правильно (т.е. меняем положение формы, и изменения значения соответствующих свойств автоматически попадают в датасет). Однако, предположим, что файла нет, и наша задача — создать его, притом, сохранив туда ровно то состояние формы, в котором она открывается сама (т.е. как было спроектировано в дизайнере).

2) Я пытаюсь сделать следующим образом — если файла состояния нет, заводим новый пустой типизированный датасет ds, и в таблицу Form добавляю новую пустую строку. Идея в том, чтобы после этого "форсировать" байндинг данных из формы — т.е. чтоб значения Width, Height, и т.п. перенеслись в датасет (как это происходит в п.1), когда мы ресайзим форму).

Как я понял, у BindingManagerBase есть защищённые методы, которые используются средой .NET для связи датасорса со свойствами — PullData() и PushData().
Вызов PullData, по всей видимости, решил бы мои проблемы — я бы таким образом вынудил перенести требуемые свойства формы в датасет.
Может, их как-то можно вызвать — например, подменив стандартное свойство BindingManagerBase формы собственным BindingManager`ом?

Или есть другие варианты?
Re: Как "форсировать" DataBinding свойств формы и датасета
От: FLUID Украина http://yuriy-okhmat.blogspot.com/
Дата: 27.04.06 14:46
Оценка:
Invoke через Reflection
Мы не владеем тем, чего мы не понимаем....
Re[2]: Как "форсировать" DataBinding свойств формы и датасет
От: FLUID Украина http://yuriy-okhmat.blogspot.com/
Дата: 27.04.06 14:47
Оценка:
...защищенного метода PullData()
Мы не владеем тем, чего мы не понимаем....
Re[3]: Как "форсировать" DataBinding свойств формы и датасет
От: Аноним  
Дата: 27.04.06 14:54
Оценка:
Здравствуйте, FLUID, Вы писали:

FLU>...защищенного метода PullData()


Спасибо, думал над этим вариантом — а чего-нить более изящного нет? Мож, какой-то стандартный механизм предусмотрен — а то это несколько "с чёрного хода".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.