Hello,
I have a hierirchical data model, in summary is as following code snippet:
As you can see, Groups can be nested with no limit. It's simliar to a Folder-files structure, but data is not homogenous as needed for the TreeListView control. In fact, i'd like grouping behavior of the GridView control, but I don't know how to implement this gruping GridView.
Any help or idea?
I have a hierirchical data model, in summary is as following code snippet:
public
class
Group
{
public
string
GroupName {
get
;
set
; }
public
List<Group> Subgroups {
get
;
set
; }
public
List<Item> Items {
get
;
set
; }
}
public
class
Item
{
public
int
MyProperty {
get
;
set
; }
public
int
MyProperty2 {
get
;
set
; }
public
int
MyProperty3 {
get
;
set
; }
public
int
MyProperty4 {
get
;
set
; }
public
int
MyProperty5 {
get
;
set
; }
}
As you can see, Groups can be nested with no limit. It's simliar to a Folder-files structure, but data is not homogenous as needed for the TreeListView control. In fact, i'd like grouping behavior of the GridView control, but I don't know how to implement this gruping GridView.
Any help or idea?
7 Answers, 1 is accepted
0
Hello,
Vlad
the Telerik team
Generally you can use RadTreeListView if you want to show Groups/Subgroups. Please check the attached project for reference.
Best wishes,Vlad
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0
Daní
Top achievements
Rank 1
answered on 04 Aug 2010, 02:35 PM
Hello Vlad,
I'm affraid my explanation wasn't good enough. I'd like to view Item class propeties (MyProperty, MyProperty1,...) as the TreelistView Headers. As I explained before, I'd like to get the same behavior when GridView is grouped, but I don't know how to achive this type of grouping in DataGrid. Maybe I can achieve this playing with RowStyleSelector and/or CellStyleSelector in TreeListView. I can define an interface with a merge of the properties in Grou and Item classes, both classes implement this interface, then I can define two RowStyles, one per Group, with a template similar to the Grouping row in Datagrid for Group's instances and another style per Item instances. Using the RowStyleSelector I can supply the corresponding RowStyle depending on the instance type.
I'm affraid my explanation wasn't good enough. I'd like to view Item class propeties (MyProperty, MyProperty1,...) as the TreelistView Headers. As I explained before, I'd like to get the same behavior when GridView is grouped, but I don't know how to achive this type of grouping in DataGrid. Maybe I can achieve this playing with RowStyleSelector and/or CellStyleSelector in TreeListView. I can define an interface with a merge of the properties in Grou and Item classes, both classes implement this interface, then I can define two RowStyles, one per Group, with a template similar to the Grouping row in Datagrid for Group's instances and another style per Item instances. Using the RowStyleSelector I can supply the corresponding RowStyle depending on the instance type.
0
Hello,
Vlad
the Telerik team
Unfortunately I'm not sure how to bind Groups/Subgroups however show Items in the grid. I'm afraid that this is not possible.
Regards,Vlad
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0
Daní
Top achievements
Rank 1
answered on 17 Sep 2010, 10:11 AM
I found a nice solution to show heteogenous data with the help of RowTemplateSelector.I've definied an interface with a merge of the two types involved. Let's see:
Nou let's use a RadTreeListView in a USerControl
Note that ItemsSource is a List<IData>, and TreeListViewTableDefinition has as itemsSource the AllChildren property definied in IData.
A RowStyleSelecor is needed, it looks as following:
Easy selector, I want rows with Group instances to look without cells, just a TextBlock with the GroupName. So I must provide a GroupRowStyle an modify the RowTemplate. As all you know, the GridViewRowTemplate has a lot of xaml, the best option is, using blend, editing the RadTreeListView RowStyle. What I did was editing the RowStyle at the App.xaml (so it's avaliable via Application.Resources) with a "GroupRowStyle" key. I won't copy all the xaml, is a lot of code. Jus the key to not show the cells is substitute the DataCellsPresenter named "PART_DataCellsPresenter" by a ContentPresenter as follows:
Easy, now, rows with Group instances will not show cells, just the GroupName. Of course, a more xaml work is neede to give the "GroupRowStyle" a nice look.
I0d like to attach the example solution, but zip o rar are not allowed types.
public
interface
IData
{
int
MyProperty {
get
;
set
; }
int
MyProperty2 {
get
;
set
; }
int
MyProperty3 {
get
;
set
; }
int
MyProperty4 {
get
;
set
; }
int
MyProperty5 {
get
;
set
; }
string
GroupName {
get
;
set
; }
List<IData> AllChilds {
get
;
set
; }
}
public
class
Group: IData
{
public
Group(List<Group> subGroups, List<Item> items)
{
Subgroups = subGroups;
Items = items;
AllChilds =
new
List<IData>();
AllChilds.AddRange(Subgroups.ToArray());
AllChilds.AddRange(Items.ToArray());
}
public
int
MyProperty {
get
;
set
; }
public
int
MyProperty2 {
get
;
set
; }
public
int
MyProperty3 {
get
;
set
; }
public
int
MyProperty4 {
get
;
set
; }
public
int
MyProperty5 {
get
;
set
; }
public
string
GroupName {
get
;
set
; }
public
List<IData> AllChilds {
get
;
set
; }
public
List<Group> Subgroups {
get
;
set
; }
public
List<Item> Items {
get
;
set
; }
}
public
class
Item: IData
{
public
int
MyProperty {
get
;
set
; }
public
int
MyProperty2 {
get
;
set
; }
public
int
MyProperty3 {
get
;
set
; }
public
int
MyProperty4 {
get
;
set
; }
public
int
MyProperty5 {
get
;
set
; }
public
string
GroupName
{
get
{
return
null
; }
set
{ }
}
public
List<IData> AllChilds
{
get
{
return
null
; }
set
{ }
}
}
public class MyViewModel
{
public List<IData> Children { get; set; }
}
Nou let's use a RadTreeListView in a USerControl
<
UserControl
x:Class
=
"RadControlsSilverlightApp1.MainPage"
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
xmlns:local
=
"clr-namespace:RadControlsSilverlightApp1"
xmlns:d
=
"http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
=
"http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
=
"d"
d:DesignWidth
=
"640"
d:DesignHeight
=
"480"
>
<
UserControl.Resources
>
<
local:MyViewModel
x:Key
=
"ViewModel"
/>
<
local:RowStyleSelector
x:Key
=
"RowStyleSelector"
/>
</
UserControl.Resources
>
<
Grid
x:Name
=
"LayoutRoot"
DataContext
=
"{StaticResource ViewModel}"
>
<
telerik:RadTreeListView
ItemsSource
=
"{Binding Path=Children}"
RowStyleSelector
=
"{StaticResource RowStyleSelector}"
>
<
telerik:RadTreeListView.ChildTableDefinitions
>
<
telerik:TreeListViewTableDefinition
ItemsSource
=
"{Binding AllChildren}"
/>
</
telerik:RadTreeListView.ChildTableDefinitions
>
<
telerik:RadTreeListView.Columns
>
<
telerik:GridViewDataColumn
Header
=
"MyProperty"
DataMemberBinding
=
"{Binding Path=MyProperty}"
/>
<
telerik:GridViewDataColumn
Header
=
"MyProperty1"
DataMemberBinding
=
"{Binding Path=MyProperty1}"
/>
<
telerik:GridViewDataColumn
Header
=
"MyProperty2"
DataMemberBinding
=
"{Binding Path=MyProperty2}"
/>
<
telerik:GridViewDataColumn
Header
=
"MyProperty3"
DataMemberBinding
=
"{Binding Path=MyProperty3}"
/>
<
telerik:GridViewDataColumn
Header
=
"MyProperty4"
DataMemberBinding
=
"{Binding Path=MyProperty4}"
/>
<
telerik:GridViewDataColumn
Header
=
"MyProperty5"
DataMemberBinding
=
"{Binding Path=MyProperty5}"
/>
</
telerik:RadTreeListView.Columns
>
</
telerik:RadTreeListView
>
</
Grid
>
</
UserControl
>
Note that ItemsSource is a List<IData>, and TreeListViewTableDefinition has as itemsSource the AllChildren property definied in IData.
A RowStyleSelecor is needed, it looks as following:
public
class
RowStyleSelector: StyleSelector
{
public
override
Style SelectStyle(
object
item, DependencyObject container)
{
if
(item
is
Group)
return
Application.Current.Resources[
"GroupRowStyle"
]
as
Style;
return
base
.SelectStyle(item, container);
}
}
<
ContentPresenter
VerticalAlignment
=
"Center"
DataContext
=
"{Binding Path=DataContext, RelativeSource={RelativeSource TemplatedParent}}"
Content
=
"{Binding GroupName}"
Grid.Column
=
"3"
/>
Easy, now, rows with Group instances will not show cells, just the GroupName. Of course, a more xaml work is neede to give the "GroupRowStyle" a nice look.
I0d like to attach the example solution, but zip o rar are not allowed types.
0
Hi DanÃ,
I invite you to attach the zip file (containing the runnable sample project) in our code-libraries section.
This way the community will benefit from your application, and you will receive up to 10 000 Telerik Points.
Thank you for your efforts.
Greetings,
Veselin Vasilev
the Telerik team
I invite you to attach the zip file (containing the runnable sample project) in our code-libraries section.
This way the community will benefit from your application, and you will receive up to 10 000 Telerik Points.
Thank you for your efforts.
Greetings,
Veselin Vasilev
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items
0
Sudharshanan
Top achievements
Rank 1
answered on 10 Nov 2010, 03:43 PM
Please post the Silverlight 3 TreeListView samples. With xaml design for grid and subgrids.
Thanks
Sudhar
Thanks
Sudhar
0
Hello,
Vlad
the Telerik team
The Silverlight 3 version of our treelist was discontinued.
Sincerely yours,Vlad
the Telerik team
Do you want to have your say when we set our development plans?
Do you want to know when a feature you care about is added or when a bug fixed?
Explore the
Telerik Public Issue Tracking
system and vote to affect the priority of the items