DataGrid + PropertyGrid
От: Аноним  
Дата: 12.07.05 08:35
Оценка:
Скажите можно ли связать данные отображаемые в DataGrid с PropertyGrid ?
в первом хотелось бы отображать данные в виде таблицы, а во втором позволять редактировать отдельные записи
тоесть в данном случае наверное речь идёт о связи PropertyGrid с DataSet
Мне кажется получилась бы неплохая форма для работы с базой данных

Есть ли у кого пример кода ?
Re: DataGrid + PropertyGrid
От: ksg71 Германия  
Дата: 12.07.05 09:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Скажите можно ли связать данные отображаемые в DataGrid с PropertyGrid ?

А>в первом хотелось бы отображать данные в виде таблицы, а во втором позволять редактировать отдельные записи
А>тоесть в данном случае наверное речь идёт о связи PropertyGrid с DataSet
А>Мне кажется получилась бы неплохая форма для работы с базой данных

А>Есть ли у кого пример кода ?



нужно получить DataRowView(он есть ICustomTypeDescriptor) для текущей строки и передать ссылку на него в свойство SelectedObject Property грида
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[2]: DataGrid + PropertyGrid
От: Аноним  
Дата: 14.07.05 07:21
Оценка:
Здравствуйте, ksg71, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Скажите можно ли связать данные отображаемые в DataGrid с PropertyGrid ?

А>>в первом хотелось бы отображать данные в виде таблицы, а во втором позволять редактировать отдельные записи
А>>тоесть в данном случае наверное речь идёт о связи PropertyGrid с DataSet
А>>Мне кажется получилась бы неплохая форма для работы с базой данных

А>>Есть ли у кого пример кода ?



K>нужно получить DataRowView(он есть ICustomTypeDescriptor) для текущей строки и передать ссылку на него в свойство SelectedObject Property грида


Да это получилось, спасибо
возникает следующий вопрос, как переименовать имена полей отображаемых в propertygrid ?
и ещё придётся к определённым полям добавлять выпадающие списки, чтобы с помощью них их можно было редактировать записи в PropertyGrid. Подскажите пожалуйста хороший способ
Я использую TypedDataset. Может в XML Designer есть способы для назначения этих возможностей ?
Re[3]: DataGrid + PropertyGrid
От: ksg71 Германия  
Дата: 14.07.05 09:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ksg71, Вы писали:


K>>Здравствуйте, Аноним, Вы писали:


А>>>Скажите можно ли связать данные отображаемые в DataGrid с PropertyGrid ?

А>>>в первом хотелось бы отображать данные в виде таблицы, а во втором позволять редактировать отдельные записи
А>>>тоесть в данном случае наверное речь идёт о связи PropertyGrid с DataSet
А>>>Мне кажется получилась бы неплохая форма для работы с базой данных

А>>>Есть ли у кого пример кода ?



K>>нужно получить DataRowView(он есть ICustomTypeDescriptor) для текущей строки и передать ссылку на него в свойство SelectedObject Property грида


А>Да это получилось, спасибо

А>возникает следующий вопрос, как переименовать имена полей отображаемых в propertygrid ?
А>и ещё придётся к определённым полям добавлять выпадающие списки, чтобы с помощью них их можно было редактировать записи в PropertyGrid. Подскажите пожалуйста хороший способ
А>Я использую TypedDataset. Может в XML Designer есть способы для назначения этих возможностей ?


Я бы написал класс реализующий ICustomTypeDescriptor, берущий данные из DataRow, для столбцов —
некие MyColumnPropertyDescriptor : PropertyDescriptor, для переименования нужно в конструктор
PropertyDescriptor'а передавать "имя свойства", которое видно в PropertyGrid'e. Чтобы грид рисовал ввыпадающий список, самое простое — свойство PropertyDescriptor.PropertyType должно возвращать тип некого enum'a
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[4]: DataGrid + PropertyGrid
От: Аноним  
Дата: 14.07.05 10:33
Оценка:
Здравствуйте, ksg71, Вы писали:

K>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, ksg71, Вы писали:


K>>>Здравствуйте, Аноним, Вы писали:


А>>>>Скажите можно ли связать данные отображаемые в DataGrid с PropertyGrid ?

А>>>>в первом хотелось бы отображать данные в виде таблицы, а во втором позволять редактировать отдельные записи
А>>>>тоесть в данном случае наверное речь идёт о связи PropertyGrid с DataSet
А>>>>Мне кажется получилась бы неплохая форма для работы с базой данных

А>>>>Есть ли у кого пример кода ?



K>>>нужно получить DataRowView(он есть ICustomTypeDescriptor) для текущей строки и передать ссылку на него в свойство SelectedObject Property грида


А>>Да это получилось, спасибо

А>>возникает следующий вопрос, как переименовать имена полей отображаемых в propertygrid ?
А>>и ещё придётся к определённым полям добавлять выпадающие списки, чтобы с помощью них их можно было редактировать записи в PropertyGrid. Подскажите пожалуйста хороший способ
А>>Я использую TypedDataset. Может в XML Designer есть способы для назначения этих возможностей ?


K>Я бы написал класс реализующий ICustomTypeDescriptor, берущий данные из DataRow, для столбцов —

K>некие MyColumnPropertyDescriptor : PropertyDescriptor, для переименования нужно в конструктор
K>PropertyDescriptor'а передавать "имя свойства", которое видно в PropertyGrid'e. Чтобы грид рисовал ввыпадающий список, самое простое — свойство PropertyDescriptor.PropertyType должно возвращать тип некого enum'a


Понял, спасибо, буду пытаться
правда пока не совсем осознаю с чего начать
Re[5]: DataGrid + PropertyGrid
От: ksg71 Германия  
Дата: 14.07.05 11:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, ksg71, Вы писали:


K>>Здравствуйте, Аноним, Вы писали:


А>>>Здравствуйте, ksg71, Вы писали:


K>>>>Здравствуйте, Аноним, Вы писали:


А>>>>>Скажите можно ли связать данные отображаемые в DataGrid с PropertyGrid ?

А>>>>>в первом хотелось бы отображать данные в виде таблицы, а во втором позволять редактировать отдельные записи
А>>>>>тоесть в данном случае наверное речь идёт о связи PropertyGrid с DataSet
А>>>>>Мне кажется получилась бы неплохая форма для работы с базой данных

А>>>>>Есть ли у кого пример кода ?



K>>>>нужно получить DataRowView(он есть ICustomTypeDescriptor) для текущей строки и передать ссылку на него в свойство SelectedObject Property грида


А>>>Да это получилось, спасибо

А>>>возникает следующий вопрос, как переименовать имена полей отображаемых в propertygrid ?
А>>>и ещё придётся к определённым полям добавлять выпадающие списки, чтобы с помощью них их можно было редактировать записи в PropertyGrid. Подскажите пожалуйста хороший способ
А>>>Я использую TypedDataset. Может в XML Designer есть способы для назначения этих возможностей ?


K>>Я бы написал класс реализующий ICustomTypeDescriptor, берущий данные из DataRow, для столбцов —

K>>некие MyColumnPropertyDescriptor : PropertyDescriptor, для переименования нужно в конструктор
K>>PropertyDescriptor'а передавать "имя свойства", которое видно в PropertyGrid'e. Чтобы грид рисовал ввыпадающий список, самое простое — свойство PropertyDescriptor.PropertyType должно возвращать тип некого enum'a


А>Понял, спасибо, буду пытаться

А>правда пока не совсем осознаю с чего начать



Для начала посмотри рефлектором, как устроен DataRowView и DataColumnPropertyDescriptor
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[6]: DataGrid + PropertyGrid
От: Аноним  
Дата: 14.07.05 12:22
Оценка:
извините может за тупой вопрос
рефлектор — это наверное какая то утилита от Visual Studio ?
Re[7]: DataGrid + PropertyGrid
От: Аноним  
Дата: 19.07.05 07:52
Оценка:
Заголовки полей переименовать получилось, сейчас не могу в PropertyGrid добавить выпадающие списки, которые позволяли бы выбирать для полей таблицы представляющих внешние ключи список из главных таблиц находящихся в том же DataSet

В методах GetValue и PropertyType была тестовая попытка создать выпадающий список, но почему то вместо этого я наблюдаю редактор для коллекции строк


using System;
using System.Text;
using System.ComponentModel;
using System.Data;

namespace CIS
{
    public class RowsProperty: ICustomTypeDescriptor
    {
        public object Value;
        PropertyDescriptorCollection propsCollection;

        public RowsProperty(object inf)
        {
            Value = inf;
            propsCollection = new PropertyDescriptorCollection(null);
            PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(inf);//(obj, true);
            
            for(int i=0; i<pdc.Count; i++)
            {
                MyPropDesc mpd = new MyPropDesc(pdc[i], (inf as System.Data.DataRowView).DataView.Table.Columns[i].Caption);
                propsCollection.Add(mpd);
            }
            
        }
        

        /////////////////////////////////////////////////////////
        /// ICustomTypeDescriptor
        ///
        AttributeCollection ICustomTypeDescriptor.GetAttributes() 
        {
            return new AttributeCollection(null);
        }

        string ICustomTypeDescriptor.GetClassName() { return null; }
        string ICustomTypeDescriptor.GetComponentName() { return null; }
        TypeConverter ICustomTypeDescriptor.GetConverter() { return null; }
        EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() { return null; }
        PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() { return null; }
        object ICustomTypeDescriptor.GetEditor(Type editorBaseType) { return null; }

        EventDescriptorCollection ICustomTypeDescriptor.GetEvents() 
        {
            return new EventDescriptorCollection(null);
        }

        EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes) 
        {
            return new EventDescriptorCollection(null);
        }

        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties() 
        {
            return propsCollection;
        }

        PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes) 
        {
            return propsCollection;
        }

        object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd) 
        {
            return this;
        }
    }

    public class MyPropDesc : PropertyDescriptor
    {
        PropertyDescriptor _PropDesc;
        String _name;

        public MyPropDesc(PropertyDescriptor propDesc, String name) : base(propDesc)
        {
            _PropDesc = propDesc;
            _name = name;
        }
        public override string Category { get { return _PropDesc.Category; } }
        public override string DisplayName {
        get { 
                return _name;
            } 
        }
        public override Type ComponentType { get { return _PropDesc.ComponentType; } }
        public override bool IsReadOnly { get { return false; } }
        public override Type PropertyType 
        { 
            get 
            {
                if (_PropDesc.Name == "person_s_name") 
                {
                    
                    return typeof(string[]);
                } else return _PropDesc.PropertyType; 
            }
             
        }
        public override bool CanResetValue(object component) { return false; } 
        public override bool ShouldSerializeValue(object component) { return true; } 
        public override void ResetValue(object component) {} 

        public override object GetValue(object component) 
        {
            if (_PropDesc.Name == "person_s_name") 
            {
                string[] sb = {"11111", "22222"};
                
                return sb;
            } 
            else return (((RowsProperty)component).Value as DataRowView).Row[_PropDesc.Name];

            
        }

        public override void SetValue(object component, object value) 
        {
            (((RowsProperty)component).Value as DataRowView).Row[_PropDesc.Name]=value;
        }
    }

}





Или может быть стили отображения полей в PropertyGrid можно задать на этапе создания DataGridColumnStyle для DataGrid ? Интересно что его конструктор принимает PropertyDescriptor, к чему бы это ?
Re[8]: DataGrid + PropertyGrid
От: ksg71 Германия  
Дата: 19.07.05 10:12
Оценка:
Здравствуйте, Аноним, Вы писали:



А>Заголовки полей переименовать получилось, сейчас не могу в PropertyGrid добавить выпадающие списки, которые позволяли бы выбирать для полей таблицы представляющих внешние ключи список из главных таблиц находящихся в том же DataSet


А>В методах GetValue и PropertyType была тестовая попытка создать выпадающий список, но почему то вместо этого я наблюдаю редактор для коллекции строк




идею можно здесь посмотреть правда зарегистрироваться нужно
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[9]: DataGrid + PropertyGrid
От: Serge2005  
Дата: 19.07.05 14:01
Оценка:
Спасибо большое ! Кое что уже стало получаться

Я взял за пример одну из чьих то реализаций
TypeConverter

    public class ConverterBool : System.ComponentModel.TypeConverter
    {
        StandardValuesCollection svc = new StandardValuesCollection(new bool[]{true, false});
        public ConverterBool(){}
        public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            return true;
        }
        public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
        {
            return true;
        }
        public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
        {        
            return svc;
        }
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            if(sourceType == typeof(string))
                return true;

            return base.CanConvertFrom (context, sourceType);
        }
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            string str = value as string;
            if(str != null)
                return (str == "Истина");

            return base.ConvertFrom (context, culture, value);
        }
        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            if(destinationType == typeof(string))
                return true;

            return base.CanConvertTo (context, destinationType);
        }
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
        {
            if(destinationType == typeof(string) && value != null)
            {
                if(value.GetType() == typeof(bool))
                {
                    bool val = (bool)value;
                    if(val)
                        return "Истина";
                    else
                        return "Ложь";
                }
            }

            return base.ConvertTo (context, culture, value, destinationType);
        }
    }



далее в классе MyPropDesc сделал типа того


public override TypeConverter Converter 
        {
            get 
            {
                if (_PropDesc.Name == "dsp_sex_name") 
                {
                    return new ConverterBool();
                } else return base.Converter;
            }
        }


В общем уже стало получаться и появились определённые понятия.

Большое Вам спасибо за помощь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.