This is a migrated thread and some comments may be shown as answers.

Hierachrchical Data

1 Answer 66 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Andreas
Top achievements
Rank 1
Andreas asked on 20 Apr 2011, 10:24 AM
Hello!

I got a sample project from telerik team! (235440_loadrowdetails) for hierarchical datagrid.
public class MyViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
  
        private ObservableCollection<Club> clubs;
        private ObservableCollection<Player> players;
        private object selectedItem;
  
        public ObservableCollection<Club> Clubs
        {
            get
            {
                if (this.clubs == null)
                {
                    this.clubs = Club.GetClubs();
                }
  
                return this.clubs;
            }
        }
  
        public ObservableCollection<Player> Players
        {
            get
            {
                if (this.players == null)
                {
                    this.players = Player.GetPlayers();
                }
  
                return this.players;
            }
        }
  
        public object SelectedItem
        {
            get { return this.selectedItem; }
            set
            {
                if (value != this.selectedItem)
                {
                    this.selectedItem = value;
                    this.OnPropertyChanged("SelectedItem");
                }
            }
        }
  
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                handler(this, args);
            }
        }
  
        private void OnPropertyChanged(string propertyName)
        {
            this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
        }
    }
}
  
namespace LoadRowDetails
{
    /// <summary>
    /// A football club.
    /// </summary>
    public class Club : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
  
        private string name;
        private DateTime established;
        private int stadiumCapacity;
        private ObservableCollection<Player> players;
  
        public string Name
        {
            get { return this.name; }
            set
            {
                if (value != this.name)
                {
                    this.name = value;
                    this.OnPropertyChanged("Name");
                }
            }
        }
  
        public DateTime Established
        {
            get { return this.established; }
            set
            {
                if (value != this.established)
                {
                    this.established = value;
                    this.OnPropertyChanged("Established");
                }
            }
        }
  
        public int StadiumCapacity
        {
            get { return this.stadiumCapacity; }
            set
            {
                if (value != this.stadiumCapacity)
                {
                    this.stadiumCapacity = value;
                    this.OnPropertyChanged("StadiumCapacity");
                }
            }
        }
  
        public ObservableCollection<Player> Players
        {
            get
            {
                if (null == this.players)
                {
                    this.players = new ObservableCollection<Player>();
                }
  
                return this.players;
            }
        }
  
        public Club()
        {
  
        }
  
        public Club(string name, DateTime established, int stadiumCapacity)
        {
            this.name = name;
            this.established = established;
            this.stadiumCapacity = stadiumCapacity;
        }
  
        public Club(string name, DateTime established, int stadiumCapacity, ObservableCollection<Player> players)
            : this(name, established, stadiumCapacity)
        {
            this.players = players;
        }
  
        protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
        {
            PropertyChangedEventHandler handler = this.PropertyChanged;
            if (handler != null)
            {
                handler(this, args);
            }
        }
  
        private void OnPropertyChanged(string propertyName)
        {
            this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
        }
  
        public override string ToString()
        {
            return this.Name;
        }
  
        public static ObservableCollection<Club> GetClubs()
        {
            ObservableCollection<Club> clubs = new ObservableCollection<Club>();
            Club club;
  
            // Liverpool
            //club = parent_order
            //club.OrderChain.Add
            club = new Club("Liverpool", new DateTime(1892, 1, 1), 45362);
            club.Players.Add(new Player("Pepe Reina", 25, Position.GK, "Spain"));
            club.Players.Add(new Player("Jamie Carragher", 23, Position.DF, "England"));
            club.Players.Add(new Player("Steven Gerrard", 8, Position.MF, "England"));
            club.Players.Add(new Player("Fernando Torres", 9, Position.FW, "Spain"));
            clubs.Add(club);
  
            // Manchester Utd.
            club = new Club("Manchester Utd.", new DateTime(1878, 1, 1), 76212);
            club.Players.Add(new Player("Edwin van der Sar", 1, Position.GK, "Netherlands"));
            club.Players.Add(new Player("Rio Ferdinand", 5, Position.DF, "England"));
            club.Players.Add(new Player("Ryan Giggs", 11, Position.MF, "Wales"));
            club.Players.Add(new Player("Wayne Rooney", 10, Position.FW, "England"));
            clubs.Add(club);
  
            // Chelsea
            club = new Club("Chelsea", new DateTime(1905, 1, 1), 42055);
            club.Players.Add(new Player("Petr ÄŒech", 1, Position.GK, "Czech Republic"));
            club.Players.Add(new Player("John Terry", 26, Position.DF, "England"));
            club.Players.Add(new Player("Frank Lampard", 8, Position.MF, "England"));
            club.Players.Add(new Player("Nicolas Anelka", 39, Position.FW, "France"));
            clubs.Add(club);
  
            // Arsenal
            club = new Club("Arsenal", new DateTime(1886, 1, 1), 60355);
            club.Players.Add(new Player("Manuel Almunia", 1, Position.GK, "Spain"));
            club.Players.Add(new Player("Gaël Clichy", 22, Position.DF, "France"));
            club.Players.Add(new Player("Cesc Fàbregas", 4, Position.MF, "Spain"));
            club.Players.Add(new Player("Robin van Persie", 11, Position.FW, "Netherlands"));
            clubs.Add(club);
  
            return clubs;
        }
    }
}
...
Now I would like to know how to do this with dynamical data.
How do i have to implement the setter-Methods in MyViewModel?

XAML:
<Grid DataContext="{Binding}">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
  
        <telerik:RadGridView Grid.Row="0" 
                             Name="orderGrid" 
                             ItemsSource="{Binding Order_View, UpdateSourceTrigger=PropertyChanged}"
                             IsSynchronizedWithCurrentItem="True"
                             AutoGenerateColumns="False"                          
                             Margin="5">
            <telerik:RadGridView.ChildTableDefinitions>
                <telerik:GridViewTableDefinition />
            </telerik:RadGridView.ChildTableDefinitions>
  
            <telerik:RadGridView.Columns>
  
  
                               <telerik:GridViewColumn Header="Priority">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Image Height="20" Source="{Binding PriorityImage}" />
                                <TextBlock  Text="{Binding OrderPriorityShortcut}" Margin="1.2" />
                            </StackPanel>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>
  
                       <telerik:GridViewColumn Header="Transport">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Image Height="20" Source="{Binding TransportImage}" />
                                <TextBlock  Text="{Binding TransportTypeShortcut}" Margin="1.2" />
                            </StackPanel>
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                </telerik:GridViewColumn>
  
                <telerik:GridViewDataColumn DataMemberBinding="{Binding TransportWay}" Header="Transport Art" IsReadOnly="True"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding Device}" Header="Endgerät" IsReadOnly="True" DataContext="{Binding}" />
                <telerik:GridViewDataColumn DataMemberBinding="{Binding PickUpTime}" Header="Abholung" IsReadOnly="True"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding ArrivalTime}" Header="Ankunft" IsReadOnly="True"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding OrganisationUnitFrom}" Header="Von" IsReadOnly="True"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding OrganisationUnitTo}" Header="Nach" IsReadOnly="True"/>
                <telerik:GridViewDataColumn DataMemberBinding="{Binding PatientName}" Header="Name" IsReadOnly="True"/>
                <telerik:GridViewCheckBoxColumn DataMemberBinding="{Binding IsInfectious}" Header="Infektiös"/>
            </telerik:RadGridView.Columns>
  
            <telerik:RadGridView.HierarchyChildTemplate>
                <DataTemplate>
                    <telerik:RadGridView Name="orderChainGrid" 
                                         Loaded="orderChain_Loaded"
                                         ItemsSource="{Binding ChainOrders}" 
                                         AutoGenerateColumns="False">
  
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewColumn Header="Priority">
                                <telerik:GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <Image Height="20" Source="{Binding PriorityImage}" />
                                            <TextBlock  Text="{Binding OrderPriorityShortcut}" Margin="1.2" />
                                        </StackPanel>
                                    </DataTemplate>
                                </telerik:GridViewColumn.CellTemplate>
                            </telerik:GridViewColumn>
  
                            <telerik:GridViewColumn Header="Transport">
                                <telerik:GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <StackPanel Orientation="Horizontal">
                                            <Image Height="20" Source="{Binding TransportImage}" />
                                            <TextBlock  Text="{Binding TransportTypeShortcut}" Margin="1.2" />
                                        </StackPanel>
                                    </DataTemplate>
                                </telerik:GridViewColumn.CellTemplate>
                            </telerik:GridViewColumn>
  
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding TransportWay}" Header="Transport Art" IsReadOnly="True"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding Device}" Header="Endgerät" IsReadOnly="True"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding PickUpTime}" Header="Abholung" IsReadOnly="True"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding ArrivalTime}" Header="Ankunft" IsReadOnly="True"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding OrganisationUnitFrom}" Header="Von" IsReadOnly="True"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding OrganisationUnitTo}" Header="Nach" IsReadOnly="True"/>
                            <telerik:GridViewDataColumn DataMemberBinding="{Binding PatientName}" Header="Name" IsReadOnly="True"/>
                            <telerik:GridViewCheckBoxColumn DataMemberBinding="{Binding IsInfectious}" Header="Infektiös"/>
                        </telerik:RadGridView.Columns>
                    </telerik:RadGridView>
                </DataTemplate>
            </telerik:RadGridView.HierarchyChildTemplate>



In my project I get my data in a background thread. And every time when data changes, my grid should update. Can you post me an "update-Method" for the telerik datagrid?

At the moment, I tried to do the following in my backgroundworker:

this.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal,
          (UpdateGrid)delegate(List<OrderView> ocov)
          {
          this.orderGrid.ItemsSource = ov.DisplayOrders(ref ocov);
          }, e.Result);
but this is not allowed.

Greetings

1 Answer, 1 is accepted

Sort by
0
Ivan Ivanov
Telerik team
answered on 26 Apr 2011, 08:30 AM
Hello Andreas,

You are not allowed to access your RadGridView instance on a background thread.  I have prepared an example project that represents a possible approach to your case. Please, refer to it and inform us if this solution meets you requirements.  

Greetings,
Ivan Ivanov
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
Tags
GridView
Asked by
Andreas
Top achievements
Rank 1
Answers by
Ivan Ivanov
Telerik team
Share this question
or