I have a RadGrid nested within another grid. During the DataLoading event for the main outer grid, I have setup a RowLoaded event. In this event, the click event for the checkboxes in the inner grid are wired to the appropriate method. However, when I run the project the click event will not fire. Any suggestions will be greatly appreciated. Thank you.
<Window x:Class="FSPUpgradeServer.MainScreen"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:fsp="clr-namespace:HarlandFS.FSP.Controls;assembly=FSPControls"
Title="MainScreen"
Height="500"
Width="615">
<Window.Resources>
<Style TargetType="{x:Type telerik:GridViewRow}">
<EventSetter Event="GotFocus"
Handler="GridViewRow_GotFocus"/>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80*" />
<ColumnDefinition Width="80*" />
<ColumnDefinition Width="80*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="268*" />
<RowDefinition Height="27*" />
<RowDefinition Height="167*" />
</Grid.RowDefinitions>
<telerik:RadGridView Name="grdSystems"
AutoGenerateColumns="False"
IsFilteringAllowed="False"
ShowGroupPanel="False"
Grid.ColumnSpan="4"
Loaded="grdSystems_Loaded"
DataLoading="grdSystems_DataLoading">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Width="Auto"
Header="Upgrade"
IsReorderable="False"
UniqueName="Upgrade">
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Click="CheckBox_Click">
</CheckBox>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Width="Auto"
Header="System Name"
IsReadOnly="True"
IsReorderable="False"
UniqueName="SystemName" />
<telerik:GridViewDataColumn Width="Auto"
Header="# of Accts"
IsReadOnly="True"
IsReorderable="False"
UniqueName="NumberOfAccounts"
TextAlignment="Right" />
<telerik:GridViewDataColumn Width="Auto"
Header="# of Terminals"
IsReadOnly="True"
IsReorderable="False"
UniqueName="NumberOfTerminals"
TextAlignment="Right" />
<telerik:GridViewDataColumn Width="Auto"
Header="# of msgs sent"
IsReadOnly="True"
IsReorderable="False"
UniqueName="NumberOfMsgSent"
TextAlignment="Right" />
<telerik:GridViewDataColumn Width="Auto"
Header="# msgs received"
IsReadOnly="True"
IsReorderable="False"
TextAlignment="Right" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
<Button Name="btnAdd"
Grid.Row="1"
Click="btnAdd_Click">_Add</Button>
<Button Name="btnEdit"
Grid.Row="1"
Grid.Column="1"
Click="btnEdit_Click">_Edit</Button>
<Button Name="btnDelete"
Grid.Row="1"
Grid.Column="2"
Click="btnDelete_Click">_Delete</Button>
<GroupBox Grid.Row="2"
Grid.ColumnSpan="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="133*" />
<ColumnDefinition Width="100*" />
<ColumnDefinition Width="133*" />
<ColumnDefinition Width="100*" />
</Grid.ColumnDefinitions>
<Label VerticalAlignment="Center">File Location</Label>
<fsp:FSPTextBox Name="txtClientLocation"
Grid.Column="1"
Margin="2"
LostFocus="txtClientLocation_LostFocus"
IsRequired="True"
Text=".\FSP.msi"
Grid.ColumnSpan="2" />
<Button Name="btnBrowse"
Grid.Column="3"
Click="btnBrowse_Click"
Margin="2">_Browse</Button>
<Label Grid.Row="1"
VerticalAlignment="Center">Host Location</Label>
<fsp:FSPTextBox Name="txtHostLocation"
Grid.Row="1"
Grid.Column="1"
Margin="2"
IsRequired="True"
Grid.ColumnSpan="2" />
<Label Grid.Row="2"
VerticalAlignment="Center">Version Number</Label>
<fsp:FSPTextBox Name="txtVersion"
Grid.Row="2"
Grid.Column="1"
Margin="2"
IsRequired="True" />
<Label Grid.Row="2"
Grid.Column="2"
VerticalAlignment="Center">Messages to send</Label>
<fsp:FSPTextBox Name="txtMessages"
Grid.Row="2"
Grid.Column="3"
Margin="2"
IsRequired="True"
DataType="Integer" />
<Label Grid.Row="3"
VerticalAlignment="Center">Time Interval(Minutes)</Label>
<fsp:FSPTextBox Name="txtTimeInterval"
Grid.Row="3"
Grid.Column="1"
Margin="2"
IsRequired="True"
DataType="Integer" />
<Button Name="btnStart"
Grid.Row="3"
Grid.Column="3"
Click="btnStart_Click">_Start</Button>
<Label Name="lblStatus"
Grid.Row="4"
Grid.ColumnSpan="4"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<ProgressBar Name="prgStatus"
Grid.Row="5"
Grid.ColumnSpan="4"
Margin="2" />
</Grid>
</GroupBox>
</Grid>
</Window>
public MainScreen()
{
InitializeComponent();
messageTimer.Tick += new EventHandler(messageTimer_Tick);
try
{
using (FileStream fs = new FileStream("FSPUpgradeAccounts.xml", FileMode.Open))
{
SoapFormatter bf = new SoapFormatter();
ArrayList serializableList = bf.Deserialize(fs) as ArrayList;
//_AccountList = new ObservableCollection<FSPAccount>();
foreach (object item in serializableList)
{
FSPAccount addAccount = item as FSPAccount;
addAccount.GetTerminalList();
AccountList.Add(addAccount);
}
}
}
catch
{
}
//var detailDefinition = new Telerik.Windows.Controls.GridViewTableDefinition();
//detailDefinition.Relation = new Telerik.Windows.Data.PropertyRelation("Terminals");
//grdAccounts.TableDefinition.ChildTableDefinitions.Add(detailDefinition);
//grdAccounts.ItemsSource = AccountList;
var detailDefinition = new Telerik.Windows.Controls.GridViewTableDefinition();
detailDefinition.Relation = new Telerik.Windows.Data.PropertyRelation("Accounts");
grdSystems.TableDefinition.ChildTableDefinitions.Add(detailDefinition);
grdSystems.ItemsSource = SystemList;
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
}
private void grdSystems_DataLoading(object sender, GridViewDataLoadingEventArgs e)
{
var dataControl = (GridViewDataControl)sender;
if (dataControl.ParentRow != null && dataControl.ChildTableDefinitions.Count == 0)
{
ObservableCollection<FSPAccount> account;
try
{
account = (ObservableCollection<FSPAccount>)e.ItemsSource;
}
catch
{
//TODO: Look for a better way to do this?
account = null;
}
if (account != null)
{
//Setup relation to the Terminals sub grid
var detailDefinition = new Telerik.Windows.Controls.GridViewTableDefinition();
detailDefinition.Relation = new Telerik.Windows.Data.PropertyRelation("Terminals");
//Create the columns for the Accounts "sub grid"
GridViewDataColumn column = new GridViewDataColumn();
column.UniqueName = "Upgrade";
GridViewCell cell = new GridViewCell();
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "Name";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "TotalTerminals";
column.Header = "Number of Terminals";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "SentTerminals";
column.Header = "#Sent";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "ReceivedTerminals";
column.Header = "#Received";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
//Set some properties on the Accounts sub grid
dataControl.ChildTableDefinitions.Add(detailDefinition);
dataControl.AutoGenerateColumns = false;
dataControl.ShowGroupPanel = false;
dataControl.IsFilteringAllowed = false;
dataControl.RowLoaded += new EventHandler<RowLoadedEventArgs>(dataControl_RowLoaded);
accountGridList.Add(dataControl);
}
else
{
//Create columns for the Terminals sub grid
GridViewDataColumn column = new GridViewDataColumn();
column.UniqueName = "Name";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "IsMessageSent";
column.Header = "Message Sent";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
//dataControl.ChildTableDefinitions.Add(detailDefinition);
//Set some properties on the Terminals sub grid
dataControl.AutoGenerateColumns = false;
dataControl.ShowGroupPanel = false;
dataControl.IsFilteringAllowed = false;
}
//grdSystems.Rebind();
}
}
void dataControl_RowLoaded(object sender, RowLoadedEventArgs e)
{
if (e.Row is GridViewRow)
{
GridViewDataControl grid = (GridViewDataControl)sender;
CheckBox chk = (CheckBox)e.Row.Cells[0].Content;
chk.Click += new RoutedEventHandler(UpgradeAccount_Click);
}
}
void UpgradeAccount_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("in Click");
}
<Window x:Class="FSPUpgradeServer.MainScreen"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:fsp="clr-namespace:HarlandFS.FSP.Controls;assembly=FSPControls"
Title="MainScreen"
Height="500"
Width="615">
<Window.Resources>
<Style TargetType="{x:Type telerik:GridViewRow}">
<EventSetter Event="GotFocus"
Handler="GridViewRow_GotFocus"/>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80*" />
<ColumnDefinition Width="80*" />
<ColumnDefinition Width="80*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="268*" />
<RowDefinition Height="27*" />
<RowDefinition Height="167*" />
</Grid.RowDefinitions>
<telerik:RadGridView Name="grdSystems"
AutoGenerateColumns="False"
IsFilteringAllowed="False"
ShowGroupPanel="False"
Grid.ColumnSpan="4"
Loaded="grdSystems_Loaded"
DataLoading="grdSystems_DataLoading">
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn Width="Auto"
Header="Upgrade"
IsReorderable="False"
UniqueName="Upgrade">
<telerik:GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Click="CheckBox_Click">
</CheckBox>
</DataTemplate>
</telerik:GridViewColumn.CellTemplate>
</telerik:GridViewDataColumn>
<telerik:GridViewDataColumn Width="Auto"
Header="System Name"
IsReadOnly="True"
IsReorderable="False"
UniqueName="SystemName" />
<telerik:GridViewDataColumn Width="Auto"
Header="# of Accts"
IsReadOnly="True"
IsReorderable="False"
UniqueName="NumberOfAccounts"
TextAlignment="Right" />
<telerik:GridViewDataColumn Width="Auto"
Header="# of Terminals"
IsReadOnly="True"
IsReorderable="False"
UniqueName="NumberOfTerminals"
TextAlignment="Right" />
<telerik:GridViewDataColumn Width="Auto"
Header="# of msgs sent"
IsReadOnly="True"
IsReorderable="False"
UniqueName="NumberOfMsgSent"
TextAlignment="Right" />
<telerik:GridViewDataColumn Width="Auto"
Header="# msgs received"
IsReadOnly="True"
IsReorderable="False"
TextAlignment="Right" />
</telerik:RadGridView.Columns>
</telerik:RadGridView>
<Button Name="btnAdd"
Grid.Row="1"
Click="btnAdd_Click">_Add</Button>
<Button Name="btnEdit"
Grid.Row="1"
Grid.Column="1"
Click="btnEdit_Click">_Edit</Button>
<Button Name="btnDelete"
Grid.Row="1"
Grid.Column="2"
Click="btnDelete_Click">_Delete</Button>
<GroupBox Grid.Row="2"
Grid.ColumnSpan="4">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
<RowDefinition Height="27*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="133*" />
<ColumnDefinition Width="100*" />
<ColumnDefinition Width="133*" />
<ColumnDefinition Width="100*" />
</Grid.ColumnDefinitions>
<Label VerticalAlignment="Center">File Location</Label>
<fsp:FSPTextBox Name="txtClientLocation"
Grid.Column="1"
Margin="2"
LostFocus="txtClientLocation_LostFocus"
IsRequired="True"
Text=".\FSP.msi"
Grid.ColumnSpan="2" />
<Button Name="btnBrowse"
Grid.Column="3"
Click="btnBrowse_Click"
Margin="2">_Browse</Button>
<Label Grid.Row="1"
VerticalAlignment="Center">Host Location</Label>
<fsp:FSPTextBox Name="txtHostLocation"
Grid.Row="1"
Grid.Column="1"
Margin="2"
IsRequired="True"
Grid.ColumnSpan="2" />
<Label Grid.Row="2"
VerticalAlignment="Center">Version Number</Label>
<fsp:FSPTextBox Name="txtVersion"
Grid.Row="2"
Grid.Column="1"
Margin="2"
IsRequired="True" />
<Label Grid.Row="2"
Grid.Column="2"
VerticalAlignment="Center">Messages to send</Label>
<fsp:FSPTextBox Name="txtMessages"
Grid.Row="2"
Grid.Column="3"
Margin="2"
IsRequired="True"
DataType="Integer" />
<Label Grid.Row="3"
VerticalAlignment="Center">Time Interval(Minutes)</Label>
<fsp:FSPTextBox Name="txtTimeInterval"
Grid.Row="3"
Grid.Column="1"
Margin="2"
IsRequired="True"
DataType="Integer" />
<Button Name="btnStart"
Grid.Row="3"
Grid.Column="3"
Click="btnStart_Click">_Start</Button>
<Label Name="lblStatus"
Grid.Row="4"
Grid.ColumnSpan="4"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<ProgressBar Name="prgStatus"
Grid.Row="5"
Grid.ColumnSpan="4"
Margin="2" />
</Grid>
</GroupBox>
</Grid>
</Window>
public MainScreen()
{
InitializeComponent();
messageTimer.Tick += new EventHandler(messageTimer_Tick);
try
{
using (FileStream fs = new FileStream("FSPUpgradeAccounts.xml", FileMode.Open))
{
SoapFormatter bf = new SoapFormatter();
ArrayList serializableList = bf.Deserialize(fs) as ArrayList;
//_AccountList = new ObservableCollection<FSPAccount>();
foreach (object item in serializableList)
{
FSPAccount addAccount = item as FSPAccount;
addAccount.GetTerminalList();
AccountList.Add(addAccount);
}
}
}
catch
{
}
//var detailDefinition = new Telerik.Windows.Controls.GridViewTableDefinition();
//detailDefinition.Relation = new Telerik.Windows.Data.PropertyRelation("Terminals");
//grdAccounts.TableDefinition.ChildTableDefinitions.Add(detailDefinition);
//grdAccounts.ItemsSource = AccountList;
var detailDefinition = new Telerik.Windows.Controls.GridViewTableDefinition();
detailDefinition.Relation = new Telerik.Windows.Data.PropertyRelation("Accounts");
grdSystems.TableDefinition.ChildTableDefinitions.Add(detailDefinition);
grdSystems.ItemsSource = SystemList;
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
}
private void grdSystems_DataLoading(object sender, GridViewDataLoadingEventArgs e)
{
var dataControl = (GridViewDataControl)sender;
if (dataControl.ParentRow != null && dataControl.ChildTableDefinitions.Count == 0)
{
ObservableCollection<FSPAccount> account;
try
{
account = (ObservableCollection<FSPAccount>)e.ItemsSource;
}
catch
{
//TODO: Look for a better way to do this?
account = null;
}
if (account != null)
{
//Setup relation to the Terminals sub grid
var detailDefinition = new Telerik.Windows.Controls.GridViewTableDefinition();
detailDefinition.Relation = new Telerik.Windows.Data.PropertyRelation("Terminals");
//Create the columns for the Accounts "sub grid"
GridViewDataColumn column = new GridViewDataColumn();
column.UniqueName = "Upgrade";
GridViewCell cell = new GridViewCell();
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "Name";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "TotalTerminals";
column.Header = "Number of Terminals";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "SentTerminals";
column.Header = "#Sent";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "ReceivedTerminals";
column.Header = "#Received";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
//Set some properties on the Accounts sub grid
dataControl.ChildTableDefinitions.Add(detailDefinition);
dataControl.AutoGenerateColumns = false;
dataControl.ShowGroupPanel = false;
dataControl.IsFilteringAllowed = false;
dataControl.RowLoaded += new EventHandler<RowLoadedEventArgs>(dataControl_RowLoaded);
accountGridList.Add(dataControl);
}
else
{
//Create columns for the Terminals sub grid
GridViewDataColumn column = new GridViewDataColumn();
column.UniqueName = "Name";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
column = new GridViewDataColumn();
column.UniqueName = "IsMessageSent";
column.Header = "Message Sent";
column.IsReadOnly = true;
dataControl.Columns.Add(column);
//dataControl.ChildTableDefinitions.Add(detailDefinition);
//Set some properties on the Terminals sub grid
dataControl.AutoGenerateColumns = false;
dataControl.ShowGroupPanel = false;
dataControl.IsFilteringAllowed = false;
}
//grdSystems.Rebind();
}
}
void dataControl_RowLoaded(object sender, RowLoadedEventArgs e)
{
if (e.Row is GridViewRow)
{
GridViewDataControl grid = (GridViewDataControl)sender;
CheckBox chk = (CheckBox)e.Row.Cells[0].Content;
chk.Click += new RoutedEventHandler(UpgradeAccount_Click);
}
}
void UpgradeAccount_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("in Click");
}