Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дата биндинг у собственного класса 
:(
    Опции темы
Хоббит
Дата 24.6.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



Есть класс в нем есть некторое свойство с именм Field  //  как его забиндить с некотом полем таблицы или с обьетом DataBindingSource или  как это еще можно реализовать.

То есть типа как связываются контролы с таблицами, также связать свой класс и что бы все изменялось. 


 
PM MAIL   Вверх
Хоббит
Дата 25.6.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



ладно.... решаю вопрос сам.. может тогда создать свой обьект типа DataBindingSource который в конструкторе будет получать object (исходный обьект) string (имя поля обьекта) DataRow (имя строки с которой связываемся) string (имя поля таблицы)
Дальше подписываемся у обьекта на событие изменнения этого поля и на событие изменения этой строчки и синхронизируем их изменения....
Только вот опять же как по строковому имени свойства получить его и событие по которому оно меняется....???
помогите плз. 
PM MAIL   Вверх
arilou
Дата 25.6.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Хоббит @  25.6.2006,  09:55 Найти цитируемый пост)
Только вот опять же как по строковому имени свойства получить его и событие по которому оно меняется....???
помогите плз.  

Никак, если ты сам такое событие не реализуешь.  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
mr.DUDA
Дата 25.6.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Всё проще, чем кажется. Достаточно реализовать в своём объекте интерфейс IBindableComponent - и можно привязать его свойства (поля) к любому data source:

Код
using System;
using System.Data;
using System.Windows.Forms;

class Program
{
    static void Main(string[] args)
    {
        // создаём таблицу
        DataTable table = new DataTable();
        table.Columns.Add("Id", typeof(int));
        table.Columns.Add("Text", typeof(string));
        table.PrimaryKey = new DataColumn[] { table.Columns[0] };
        table.Rows.Add(1, string.Empty);

        // создаём объект
        TestObject obj = new TestObject();

        // привязка свойства "TheText" к полю таблицы
        obj.DataBindings.Add("TheText", table, "Text");

        // проверяем работу привязки
        table.Rows[0]["Text"] = "1234";
        Console.WriteLine("Row.Text = " + table.Rows[0]["Text"]);
        Console.WriteLine("obj.TheText = " + obj.TheText);

        // и наоборот
        obj.TheText = "5678";
        obj.BindingContext[table].EndCurrentEdit();
        Console.WriteLine("Row.Text = " + table.Rows[0]["Text"]);
        Console.WriteLine("obj.TheText = " + obj.TheText);
    }
}


/// <summary>
/// Тестовый класс, реализующий поддержку Data Bindings
/// </summary>
class TestObject : IBindableComponent
{
    private string theText = string.Empty;
    /// <summary>
    /// Свойство, которое можно будет биндить на data source
    /// </summary>
    public string TheText
    {
        get
        {
            return theText;
        }
        set
        {
            theText = value;
        }
    }

    /// <summary>
    /// Конструктор. Создаём BindingContext и коллекцию DataBindings
    /// </summary>
    public TestObject()
    {
        _context = new BindingContext();
        _bindings = new ControlBindingsCollection(this);
    }

    // ниже - простейшая реализация интерфейса IBindableComponent

    BindingContext _context;
    ControlBindingsCollection _bindings;
    public event EventHandler Disposed;

    public BindingContext BindingContext
    {
        get
        {
            return _context;
        }
        set
        {
            _context = value;
        }
    }

    public ControlBindingsCollection DataBindings
    {
        get
        {
            return _bindings;
        }
    }

    public System.ComponentModel.ISite Site
    {
        get
        {
            return null;
        }
        set
        {
        }
    }

    public void Dispose()
    {
    }
}
   


--------------------
user posted image
PM MAIL WWW   Вверх
Хоббит
Дата 25.6.2006, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



и вновь мистер ДУДА выручает в самый сложный момент ... респект ему!
Имеено это я и хотел узнать 
PM MAIL   Вверх
Хоббит
Дата 25.6.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



во.. в продолжении темы... а для семейства обьектов какой интерфейс реализовать .. чтобы он для датасоурца (типа таблицы) заполнился такими вот забиндеными компонентами .... или придется самому семейство заполнять связывает каждый элемент семейства со своей строчкой в таблице? 
PM MAIL   Вверх
Хоббит
Дата 25.6.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



то есть типа я в датагрид бросаю таблицу.. в нем появляются строки связанные с строками в источнике данных
также только с обьектом а не датагридом

Очень важно 
PM MAIL   Вверх
mr.DUDA
Дата 25.6.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Хм... с семейством сложнее. Знаю, что наоборот можно работать (если в датасоурсе много элементов, а объект - один) с пом. класса CurrencyManager. Надо в мсдн-е порыться... 


--------------------
user posted image
PM MAIL WWW   Вверх
Хоббит
Дата 25.6.2006, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



ладно это я и сам смогу сделать ...
по изменению свойтсва датасоур перебрать его элементы и добавить  классы биндя с каждым элементом по отдельности... если датасоур нулл то стереть все из семейства.. 
 smile

будем изворачиваться 
PM MAIL   Вверх
Хоббит
Дата 27.6.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



Получилось сделать так.

Код

            private void LoadDataSource()
            {
                IList list = (dataSource as IListSource).GetList();
                for (int index = 0; index < list.Count; index++)
                {
                    Group group = new Group("");

                    group.DataBindings.Add(
                        new System.Windows.Forms.Binding("Name", dataSource, "Name"));
                                        
                    CurrencyManager currencyManager = (CurrencyManager)this.BindingContext[dataSource];
                    currencyManager.Position = index;                                        

                    this.Add(group);

                }
            }



метод выполняется по приходу датасоурца. Теперь осталось синхронизировать добавление и удаление элементов. Добавление в семейство можно отловить по методам семейства Add и Remove и в них соответственно изменить датасоурц(добавить строчку) а как быть с изменением в датасоурце (когда я в него добавляю строку я должен добавть обьект в семейство) как это отловить? 
PM MAIL   Вверх
Хоббит
Дата 28.6.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1263
Регистрация: 6.11.2005

Репутация: нет
Всего: 1



назрел вопрос.. а что за интерфейс IList (для чего?)  и поочему мы вместо него возращаем null? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.