2015-09-22 6 views
0

Я хочу, чтобы мой пользовательский PropertyGrid со студентами1 и учеником2 был узлом с именем «Название, раздел, процент, школа» как дочерние для обоих узлов. Я пытался так:PropertyGrid с такими же дочерними и разными узлами

class StudentClass 
{ 
    private string name; 
    private string section; 
    private string percentage; 
    private string school; 

    [CategoryAttribute("Student1")] 
    public string School 
    { 
     get { return school; } 
     set { school = value; } 
    } 
    [CategoryAttribute("Student1")] 
    public string Percentage 
    { 
     get { return percentage; } 
     set { percentage = value; } 
    } 
    [CategoryAttribute("Student1")] 
    public string Section 
    { 
     get { return section; } 
     set { section = value; } 
    } 
    [CategoryAttribute("Student1")] 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 
    private string name1; 
    [CategoryAttribute("Student2")] 
    public string Name1 
    { 
     get { return name1; } 
     set { name1 = value; } 
    } 
    private string section1; 
    [CategoryAttribute("Student2")] 
    public string Section1 
    { 
     get { return section1; } 
     set { section1 = value; } 
    } 
    private string percentage1; 
    [CategoryAttribute("Student2")] 
    public string Percentage1 
    { 
     get { return percentage1; } 
     set { percentage1 = value; } 
    } 
    private string school1; 
    [CategoryAttribute("Student2")] 
    public string School1 
    { 
     get { return school1; } 
     set { school1 = value; } 
    } 
} 

public Form1() 
    { 
     InitializeComponent(); 
     StudentClass sc = new StudentClass(); 
     propertyGrid1.SelectedObject = sc1; 
    } 

Выход такой, как показано ниже:

enter image description here

Сейчас на картинке выше для Student2 вместо "name1, section1, Percentage1, School1" Я хочу дисплей такой же как студент1. Но я не получил требуемый результат. Так что любезно помогите мне в этом. Я использую C# Winforms в VS2010

И Предложите мне, как запретить изменение размеров столбцов, т. Е. Я не должен позволять пользователю изменять размеры столбцов.

ответ

2

Вы можете использовать DisplayName attribute:

private string name1; 
[CategoryAttribute("Student2"), DisplayName("Name")] 
public string Name1 
{ 
    get { return name1; } 
    set { name1 = value; } 
} 

Но обратите внимание, что если пользователь помещает таблицу свойств в A-Z режиме, они оба в конечном итоге рядом друг с другом, не реальный способ сказать им друг от друга. Вы можете найти более подходящий способ представления своих данных.

+0

Хотя это сработает, я думаю, что реальное решение здесь состоит в том, чтобы разбить каждого «ученика» на отдельный класс, а затем просто создать студенческие объекты в StudentClass. Вы можете использовать расширяемый объектный конвертер для создания расширенных объектов свойств. Еще лучше, это может быть редактор коллекций, если есть N учеников. –

+0

@Ron Действительно, следовательно, комментарий о «более подходящем пути», но у нас действительно нет достаточного контекста для консультирования, и этот вопрос может быстро стать слишком широким. –

+0

@RonBeyer ваше решение отлично работает. Спасибо – Gopi