Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
Приветствую. Добавляю TreeView возможность работы с данными: добавил датасоус и т.д. При присвоении датасоурсу значения должен инициализироваться CurrencyManager вот так: Код: 1. 2. проблемма в том, что BindingContext всегда = null, т.е. базовый класс(TreeView) его почему-то не создаёт. Если BindingContext создать явно в конструкторе - обработчик OnPositionChanged срабатывает когда позиция меняется в моём контроле, и не срабатывает если в другом, который использует тот же datasource. Как правильно инициализировать BindingContext? Заранее спасибо. зы. На всякий случай проперти датасоурс: [code] public object DataSource { get { return m_DataSource; } set { if (value == null) { cm = null; this.GroupingChanged(); } else if (m_DataSource != value) { if (!(value is IList || value is IListSource)) throw new System.ArgumentException("Invalid DataSource"); else if (value is IListSource) { IListSource mylist = value as IListSource; if (mylist.ContainsListCollection) throw new System.ArgumentException("Invalid DataSource"); //ok m_DataSource = value; if (cm != null) cm.PositionChanged -= new System.EventHandler(OnPositionChanged); if (BindingContext == null) cm = null; else { cm = (CurrencyManager)BindingContext[value]; cm.PositionChanged += new System.EventHandler(OnPositionChanged); } this.GroupingChanged(); } else { //ok m_DataSource = value; if (cm != null) cm.PositionChanged -= new System.EventHandler(OnPositionChanged); if (BindingContext == null) cm = null; else { cm = (CurrencyManager)BindingContext[value]; cm.PositionChanged += new System.EventHandler(OnPositionChanged); } this.GroupingChanged(); } } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 16:02 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
BindingContext не надо создавать, он "наследуется" от родительского контрола: формы, панели, групбокса и пр. если ничего не трогать то у всех контролов будет один и тот же BindingContext - это контекст формы. если создал сам, то в нем будет свой набор CurencyManager"ов, не зависящий от других для того же самого datasource. так что проверь свойство Parent в своем контроле. если там null, то в качестве контекста бери контекст формы (т.к. ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 17:04 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
Спасибо. Я сделал вот как: Наследовал класс от интерфейса ISupportInitialize, в EndInit прописал Код: plaintext 1. 2. 3. 4. только если Parent = null - у меня беда :( как получить указатель на форму, на которую помещён компонент? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 18:25 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
странно... вообще то представлялось, что компонент наследовался от TreeView. ну а если нет parent'а, тут уж труба - контрол вистит сам по себе - и к кому его цеплять решать надо самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 18:54 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
PS: делай привязку в свойстве DataSource - может к этому моменту все рассосётся и появится нормальный parent. не стоит это выносить ни в конструктор ни в EndInit - тем более, что parent'а могут поменять на лету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 19:04 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
спасибо за советы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 19:38 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
Вот такая штука: Сделал датабиндинг, тривью строит дерево по данным, прям как у DevExpress ^), но вот какой имеется глюк (я не знаю в чем дело, поэтому опишу симптомы): На форму помещаем мой тривью, присваиваем DataSource = Датасет1.Таблица1; Потом на эту же форму помещаем DataGrid, DataSource = такой же как и у тривью (Датасет1.Таблица1). Заполняем данными, строится дерево. Бродим по веткам - позиция в датагриде меняется (значит биндинг контекст один и тот же). Добавляем новый элемент в датагриде (10 по номеру (если с 0 считать)). В тривью срабатывает событие DataSource.ListChanged - дерево перестраивается, всё опять работает. Дальше опять в датагриде этот же элемент удаляем - опять срабатывает ListChanged, дерево перестраивается, НО при попытке перейти на какую-либо запись в гриде получаем : DataError - Unable to update the row: Index 10 is not non-negative and belows total row count. В чём проблемма, подскажите пожалуйста? ЗЫ. А вообще есть где-нибудь чёткие доки (или хотябы нормальные исходники :)) по которым можно поучиться работать с датабиндингом? Буду признателен за любые линки! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 10:34 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
вот тебе ссылка ссылка но я не дочитал ибо у меня чуть более простая задача опять :) задам свой вопрос в другом треде... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 12:15 |
|
||
|
DataBinding в своём контроле
|
|||
|---|---|---|---|
|
#18+
Я эту ссылку читаю каждый день перед сном :) Такое впечатление что в этом примере они пытались чего-то скрыть ) - Датасоурс присваивают только в рантайме, бандинг контекст нигде не синхронизируют с парентом (как я уже понял сам он этого не делает).... в общем плохой линк, но всёравно спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2003, 17:51 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32338145&tid=1439801]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 272ms |
| total: | 424ms |

| 0 / 0 |
