TabControl, DataBinding
От: Кирилл Барышников Киргизия  
Дата: 01.06.11 05:20
Оценка:
Доброго времени суток!
Имеется следующая проблема (Windows Forms, C# 2008). На форме расположен TabControl, в котором есть несколько вкладок (TabPage).
На каждой вкладке располагаются текстовые поля, которые связаны с источником данных.
Реализуется следующий механизм- перед сохранением данных осуществить валидацию, и выдать те поля, которые заполнены некорректно. Поля, подлежащие валидации располагаются на нескольких вкладках.
Проблема заключается в том, что если не активировать вкладку — то связывания элементов на соответствующей вкладке не происходит, и соответственно поле остается пустым (свойство Text пустое) – и пользователю отображается, что это поле не заполнено. Если же перейти – на вкладку – то связывание происходит
Пока используется обходной путь – перед валидацией последовательно активируем все вкладки:

            int currentIndex = tabControl.SelectedIndex;

            for (int i = 0; i < tabControl.TabCount; i++)
                if (i != currentIndex)
                    tabControl.SelectedIndex = i;

            // и снова выбираем первоначальную вкладку
            tabControl.SelectedIndex = currentIndex;



Недостаток этого метода состоит в мерцании элемента управления, и что это все происходит на глазах у пользователя
Вопрос:
— как можно реализовать DataBinding, чтобы он связывал данные во всех TabPages сразу же при загрузке форме?
— если так сделать нельзя, то как можно сделать, чтобы переключение вкладок осуществлялось без моргания (по аналогии с
listView.BeginUpdate ()

и
EndUpdate ())


Буду рад любым ссылкам, комментариям
windows forms tabcontrol databinding
Re: TabControl, DataBinding
От: out-of-the-way США www.tehnoromantik.net
Дата: 01.06.11 08:32
Оценка:
MSDN пишет:

Элементы управления, содержащиеся в объекте TabPage, не создаются до тех пор, пока не будет показана страница вкладки, и любые привязки данных в этих элементах управления не активизируются, пока не будет показана страница вкладки.


Можно при создании TabControla загружать значения в текстбоксы вручную, а уже потом делать привязку к источникам. Унаследовать от TabControl и конструкторе это проделать.
Программа — мысли спрессованные в код.
Re[2]: TabControl, DataBinding
От: Кирилл Барышников Киргизия  
Дата: 01.06.11 09:33
Оценка:
Здравствуйте, out-of-the-way, Вы писали:

OOT>Можно при создании TabControla загружать значения в текстбоксы вручную, а уже потом делать привязку к источникам. Унаследовать от TabControl и конструкторе это проделать.


Можно пример кода, т.к. даже выполнение вышеуказанного кода

            int currentIndex = tabControl.SelectedIndex;

            for (int i = 0; i < tabControl.TabCount; i++)
                if (i != currentIndex)
                    tabControl.SelectedIndex = i;

            // и снова выбираем первоначальную вкладку
            tabControl.SelectedIndex = currentIndex;


до отображения формы не дает требуемого эффекта по связыванию данных
Re[3]: TabControl, DataBinding
От: out-of-the-way США www.tehnoromantik.net
Дата: 01.06.11 12:43
Оценка:
Здравствуйте, Кирилл Барышников, Вы писали:

КБ>Здравствуйте, out-of-the-way, Вы писали:


OOT>>Можно при создании TabControla загружать значения в текстбоксы вручную, а уже потом делать привязку к источникам. Унаследовать от TabControl и конструкторе это проделать.


КБ>Можно пример кода, т.к. даже выполнение вышеуказанного кода


КБ>
КБ>            int currentIndex = tabControl.SelectedIndex;

КБ>            for (int i = 0; i < tabControl.TabCount; i++)
КБ>                if (i != currentIndex)
КБ>                    tabControl.SelectedIndex = i;

КБ>            // и снова выбираем первоначальную вкладку
КБ>            tabControl.SelectedIndex = currentIndex;

КБ>


КБ>до отображения формы не дает требуемого эффекта по связыванию данных


Принцип я уже вам сказал: загружаем значения в текстбоксы вручную, а потом подключаем привязки к данным. Вы можете это сделать в своём цикле. Во вторых: если вы отображаете какие ни будь данные, то они уже должны быть корректными,а проверку делать после их редактирования. Используйте событие TextBox.Validating, оно будет вызываться только если текст в textBox был изменён и не надо будет беспокоится о не показанных вкладках.
Программа — мысли спрессованные в код.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.