Hello
I`ve the following class properties. But they are not orderd using Display-Order. Is it possible to order properties by another way?
[Display(Name = "Field2", Order = 2)]
public string Field2
{
get; set;
}
[Display(Name = "Field3", Order = 3)]
public string Field3
{
get; set;
}
[Display(Name = "Field1", Order = 1)]
public int Field1
{
get; set;
}
4 Answers, 1 is accepted
0
Hello, Emin,
The RadSortOrderAttribute defines the order in which items would be ordered when no other ordering is applied (Alphabetical or Categorical alphabetical). The order can also be manipulated through the SortOrder property of PropertyGridItem. Setting the property would override the value from the attribute.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Dess
Progress Telerik
The RadSortOrderAttribute defines the order in which items would be ordered when no other ordering is applied (Alphabetical or Categorical alphabetical). The order can also be manipulated through the SortOrder property of PropertyGridItem. Setting the property would override the value from the attribute.
public
RadForm1()
{
InitializeComponent();
this
.radPropertyGrid1.SelectedObject =
new
Item();
}
public
class
Item
{
[DisplayName(
"Field2"
)]
[RadSortOrder(2)]
public
string
Field2 {
get
;
set
; }
[DisplayName(
"Field3"
)]
[RadSortOrder(3)]
public
string
Field3 {
get
;
set
; }
[DisplayName(
"Field1"
)]
[RadSortOrder(1)]
public
int
Field1 {
get
;
set
; }
}
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Dess
Progress Telerik
Try our brand new, jQuery-free Angular components built from ground-up which
deliver the business app essential building blocks - a grid component,
data visualization (charts) and form elements.
0
Emin
Top achievements
Rank 1
answered on 21 May 2018, 12:28 PM
Thank you for reply Dess,
Just I wanted to order entries in the DataEntry control. RadSortOrder doens`t work in the DataEntry. Is any other solution for DataEntry?
0
Emin
Top achievements
Rank 1
answered on 21 May 2018, 12:35 PM
For a while I`m using solution which is working, but I don`t like it.
May be there is something better?
[AttributeUsage(AttributeTargets.Property)]
public
class
PropertyOrderAttribute : Attribute
{
public
PropertyOrderAttribute(
int
order) { Order = order; }
public
int
Order {
get
; }
}
public
class
DataEntrySort<T> : BindingList<T>, ITypedList
{
public
PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors)
{
PropertyDescriptorCollection typePropertiesCollection = TypeDescriptor.GetProperties(
typeof
(T));
return
typePropertiesCollection.Sort(
new
PropertyDescriptorComparer());
}
public
string
GetListName(PropertyDescriptor[] listAccessors)
{
return
string
.Format(
"A list with Properties for {0}"
,
typeof
(T).Name);
}
}
public
class
PropertyDescriptorComparer : IComparer
{
public
int
Compare(
object
x,
object
y)
{
if
(x == y)
return
0;
if
(x ==
null
)
return
1;
if
(y ==
null
)
return
-1;
PropertyDescriptor propertyDescriptorX = x
as
PropertyDescriptor;
PropertyDescriptor propertyDescriptorY = y
as
PropertyDescriptor;
PropertyOrderAttribute propertyOrderAttributeX = propertyDescriptorX?.Attributes[
typeof
(PropertyOrderAttribute)]
as
PropertyOrderAttribute;
PropertyOrderAttribute propertyOrderAttributeY = propertyDescriptorY?.Attributes[
typeof
(PropertyOrderAttribute)]
as
PropertyOrderAttribute;
if
(Equals(propertyOrderAttributeX, propertyOrderAttributeY))
return
0;
if
(propertyOrderAttributeX ==
null
)
return
1;
if
(propertyOrderAttributeY ==
null
)
return
-1;
return
propertyOrderAttributeX.Order.CompareTo(propertyOrderAttributeY.Order);
}
}
public
abstract
class
StudentAbstract
{
[PropertyOrder(5)]
public
string
Field0 {
get
;
set
; }
[PropertyOrder(20)]
public
string
Field2 {
get
;
set
; }
[PropertyOrder(10)]
public
virtual
string
Field1 {
get
;
set
; }
[PropertyOrder(30)]
public
int
Field3 {
get
;
set
; }
}
public
class
Student : StudentAbstract
{
[PropertyOrder(40)]
public
string
Field4 {
get
;
set
; }
[PropertyOrder(10)]
public
override
string
Field1 {
get
;
set
; }
[PropertyOrder(50)]
public
int
Field5 {
get
;
set
; }
}
private
void
Form1_Load(
object
sender, EventArgs e)
{
radDataEntry1.DataSource =
new
DataEntrySort<Student> {
new
Student() };
}
private
void
radSaveClick(
object
sender, EventArgs e)
{
Student returnValue = ((DataEntrySort<Student>)radDataEntry1.DataSource).FirstOrDefault();
}
0
Hello, Emin,
Please excuse me for the misunderstanding regarding RadPropertyGrid. I am glad that you have found a suitable solution for your case with RadDataEntry. To be honest, this is quite an elegant approach.
RadDataEntry allows changing the location of the automatically generated editor. A sample approach is demonstrated in the following help article: https://docs.telerik.com/devtools/winforms/dataentry/programmatically-arrange-items-
However, your approach is much better in my opinion.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Dess
Progress Telerik
Please excuse me for the misunderstanding regarding RadPropertyGrid. I am glad that you have found a suitable solution for your case with RadDataEntry. To be honest, this is quite an elegant approach.
RadDataEntry allows changing the location of the automatically generated editor. A sample approach is demonstrated in the following help article: https://docs.telerik.com/devtools/winforms/dataentry/programmatically-arrange-items-
However, your approach is much better in my opinion.
I hope this information helps. If you have any additional questions, please let me know.
Regards,
Dess
Progress Telerik
Try our brand new, jQuery-free Angular components built from ground-up which
deliver the business app essential building blocks - a grid component,
data visualization (charts) and form elements.