I have a hierarchical telerik gridview in Silverlight. On the left most column, I have the expand button “+ sign.” When I click on the expand button “+ sign”, the row expands and I can view more details for my selection.
What event is fired when I click the expand button “+ sign”? I want to retrieve data from the database when the user chooses to expand a particular row. I need to do this in the correct event handler and none of the event handlers seem to work.
4 Answers, 1 is accepted
You can use RowIsExpandedChanging event. Also, you may take a look at this blog post.
Let us know if you need further help.
Best wishes,
Yordanka
the Telerik team
RowIsExpandedChanging event was not fired when I selected the expand button "+ sign" on the grid.
My code works. I just need the event that fires when I click on the expand button "+ sign."
Here is my Xaml.
<
Controls:RadGridView
x:Name
=
"PeopleGrid"
Margin
=
"0"
RowIndicatorVisibility
=
"Collapsed"
IsReadOnly
=
"True"
Width
=
"748"
MinHeight
=
"386"
MaxHeight
=
"500"
AutoGenerateColumns
=
"False"
VerticalAlignment
=
"Top"
VerticalContentAlignment
=
"Stretch"
HorizontalContentAlignment
=
"Stretch"
HorizontalAlignment
=
"Stretch"
RowIsExpandedChanging
=
"PeopleGrid_RowIsExpandedChanging"
>
<
Controls:RadGridView.Columns
>
<
Controls:GridViewToggleRowDetailsColumn
/>
<
Controls:GridViewDataColumn
Header
=
"ID"
DataMemberBinding
=
"{Binding ID}"
/>
<
Controls:GridViewDataColumn
Header
=
"First Name"
DataMemberBinding
=
"{Binding FirstName}"
/>
<
Controls:GridViewDataColumn
Header
=
"Last Name"
DataMemberBinding
=
"{Binding LastName}"
/>
</
Controls:RadGridView.Columns
>
<
telerik:RadGridView.RowDetailsTemplate
>
<
DataTemplate
>
<
ItemsControl
Name
=
"ICClasses"
ItemsSource
=
"{Binding Path=ClassList, Mode=OneWay}"
>
<
ItemsControl.ItemTemplate
>
<
DataTemplate
>
<
Border
BorderBrush
=
"DarkGray"
BorderThickness
=
"1"
Margin
=
"25,2,0,2"
CornerRadius
=
"5"
>
<
Grid
HorizontalAlignment
=
"Stretch"
ShowGridLines
=
"False"
Background
=
"Transparent"
Margin
=
"0,1,0,1"
>
<
Grid.ColumnDefinitions
>
<
ColumnDefinition
Width
=
".4*"
/>
<
ColumnDefinition
Width
=
".16*"
/>
<
ColumnDefinition
Width
=
".44*"
/>
</
Grid.ColumnDefinitions
>
<
Grid.RowDefinitions
>
<
RowDefinition
Height
=
"*"
/>
<
RowDefinition
Height
=
"*"
/>
</
Grid.RowDefinitions
>
<
TextBlock
Grid.RowSpan
=
"2"
Text
=
"{Binding Subject, Mode=OneWay}"
Margin
=
"0,0,40,0"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Right"
/>
<
TextBlock
Grid.Row
=
"0"
Grid.Column
=
"1"
Text
=
"{Binding Professor, Mode=OneWay}"
HorizontalAlignment
=
"Center"
Margin
=
"0,1,0,0"
/>
<
TextBlock
Grid.Row
=
"1"
Grid.Column
=
"1"
Text
=
"{Binding Time, Mode=OneWay}"
HorizontalAlignment
=
"Center"
Margin
=
"0,1,0,0"
/>
</
Grid
>
</
Border
>
</
DataTemplate
>
</
ItemsControl.ItemTemplate
>
</
ItemsControl
>
</
DataTemplate
>
</
telerik:RadGridView.RowDetailsTemplate
>
</
Controls:RadGridView
>
Here is my code behind C#.net (Portion of It)
public MainPage()
{
InitializeComponent();
DataContext = this;
People = new ObservableCollection<
Person
>(GetPeople());
EnterClasses();
PeopleGrid.ItemsSource = People;
}
public ObservableCollection<
Person
> People {get; set;}
private List<
Person
> GetPeople()
{
var returnPeople = new List<
Person
>
{
new Person() {ID = "1234", FirstName = "John", LastName = "Berry"},
new Person() {ID = "3512", FirstName = "Mary", LastName = "Edwards"},
new Person() {ID = "1254", FirstName = "Henry", LastName = "Mas"},
new Person() {ID = "0932", FirstName = "Terry", LastName = "Williams"},
new Person() {ID = "3512", FirstName = "Beth", LastName = "Johnson"},
new Person() {ID = "1254", FirstName = "Summer", LastName = "Sanford"}
};
return returnPeople;
}
private void EnterClasses()
{
var c1 = new ClassSubject()
{Professor = "Dr. John Dyer", Subject = "Biology", Time = "3PM - 4:30PM", UniqueId = "53913"};
var c2 = new ClassSubject() { Professor = "Dr. George Berry", Subject = "Math", Time = "1PM - 2:00PM", UniqueId = "52973" };
var classSchedule = new List<
ClassSubject
>
{
new ClassSubject() {Professor = "Dr. John Dyer", Subject = "Biology", Time = "3PM - 4:30PM", UniqueId = "53913"},
new ClassSubject() {Professor = "Dr. Ron Maher", Subject = "Physics", Time = "3PM - 4:30PM", UniqueId = "53913"},
new ClassSubject() {Professor = "Dr. George Berry", Subject = "Math", Time = "1PM - 2:00PM", UniqueId = "52973"}
};
foreach (var p in People)
{
p.ClassList = new ObservableCollection<
ClassSubject
>(classSchedule);
}
}
private void PeopleGrid_RowIsExpandedChanging(object sender, Telerik.Windows.Controls.GridView.RowCancelEventArgs e)
{
var methodcalled = "Row Expanded";
}
The event handler PeopleGrid_RowIsExpandedChanging was never called when I expanded a particular row.
ClassSubject
>
.The Person object has an observable collection:
private ObservableCollection<
ClassSubject
> _classList;
public ObservableCollection<
ClassSubject
> ClassList
{
get { return _classList; }
set { _classList = value; }
}
The View (RadGrid) will call the get attribute on the ClassListProperty when the row needs to expand. So in the get "getter" of ClassList you can put a method to make a database call.
private ObservableCollection<
ClassSubject
> _classList;
public ObservableCollection<
ClassSubject
> ClassList
{
get
{
CALLDBHERE(); //Make the call here
return _classList;
}
set { _classList = value; }
}
We have already replied to the other forum thread started by you.
Kind regards,
Yordanka
the Telerik team