Hi George,
Thanks for your reply. See below for the xaml and cs file that demonstrates the scenario that I've described.
XAML:
<UserControl x:Class="SilverlightApplication2.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:tgrid="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView"
xmlns:ti="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Input"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<tgrid:RadGridView x:Name="rgridTasks"
AutoGenerateColumns="False"
CanUserInsertRows="True"
CanUserDeleteRows="True"
ShowInsertRow="True"
IsReadOnly="False"
CanUserSortColumns="False"
ShowGroupPanel="False" MaxHeight="300">
<tgrid:RadGridView.Columns>
<tgrid:GridViewDataColumn UniqueName="StartDate" MinWidth="95" IsFilterable="False" DataMemberBinding="{Binding dastart}" DataFormatString="{} {0:MMM dd, yyyy h:mm tt}" Header="Started On">
<tgrid:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<ti:RadDateTimePicker x:Name="dtpStartDate" DisplayFormat="Short" Loaded="dtpStartDate_Loaded" SelectionChanged="dtpStartDate_SelectionChanged" Culture="en-US" ParseDateTimeValue="dtPicker_ParseDateTimeValue" />
</StackPanel>
</DataTemplate>
</tgrid:GridViewDataColumn.CellEditTemplate>
</tgrid:GridViewDataColumn>
<tgrid:GridViewDataColumn UniqueName="EndDate" MinWidth="95" IsFilterable="False" DataMemberBinding="{Binding dadue}" DataFormatString="{} {0:MMM dd, yyyy h:mm tt}" Header="Due On">
<tgrid:GridViewDataColumn.CellEditTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<ti:RadDateTimePicker x:Name="dtpEndDate" DisplayFormat="Short" Loaded="dtpEndDate_Loaded" SelectionChanged="dtpEndDate_SelectionChanged" Culture="en-US" ParseDateTimeValue="dtPicker_ParseDateTimeValue" />
</StackPanel>
</DataTemplate>
</tgrid:GridViewDataColumn.CellEditTemplate>
</tgrid:GridViewDataColumn>
<tgrid:GridViewDataColumn MinWidth="400" IsFilterable="False" DataMemberBinding="{Binding notes, Mode=TwoWay}" Header="Notes" />
<tgrid:GridViewDataColumn IsVisible="False" IsFilterable="False" DataMemberBinding="{Binding ispriority, Mode=TwoWay}" />
<tgrid:GridViewDataColumn IsVisible="False" IsFilterable="False" DataMemberBinding="{Binding idnum, Mode=TwoWay}" />
</tgrid:RadGridView.Columns>
</tgrid:RadGridView>
</Grid>
</UserControl>
Code behind:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Telerik.Windows.Controls;
using Telerik.Windows;
using Telerik.Windows.Controls.GridView;
using SilverlightApplication2.ServiceReference1;
using System.Data.Services.Client;
using System.Collections.ObjectModel;
namespace SilverlightApplication2
{
public partial class MainPage : UserControl
{
private ObservableCollection<opp_task> Tasks;
public MainPage()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPage_Loaded);
}
private void MainPage_Loaded(Object sender, RoutedEventArgs e)
{
LoadAllTasks();
}
private void LoadAllTasks()
{
//Get tasks from database
}
private void dtpStartDate_Loaded(object sender, RoutedEventArgs e)
{
RadDateTimePicker dtpicker = (RadDateTimePicker)sender;
dtpicker.SetBinding(RadDateTimePicker.DateTimeTextProperty,
new System.Windows.Data.Binding("dastart")
{
Mode = System.Windows.Data.BindingMode.TwoWay,
Source = dtpicker.ParentOfType<GridViewRow>().Item
});
}
private void dtpStartDate_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e)
{
RadDateTimePicker dtpicker = (RadDateTimePicker)sender;
if (e.RemovedItems.Count > 0 && dtpicker.ParentOfType<GridViewRow>() != null) // start date changed
{
DateTime oldStartDt = Convert.ToDateTime(e.RemovedItems[e.RemovedItems.Count - 1]);
// get opp_task object
opp_task task = dtpicker.ParentOfType<GridViewRow>().Item as opp_task;
if (task != null && e.AddedItems.Count > 0)
{
// change due date similar to start date if start is greater than due date
DateTime newStartDt = Convert.ToDateTime(e.AddedItems[e.AddedItems.Count - 1]);
if (newStartDt.Year > 1 && newStartDt > task.dadue)
task.dadue = newStartDt;
else if (newStartDt.Year == 1)
{
task.dastart = oldStartDt;
}
}
}
}
private void dtpEndDate_Loaded(object sender, RoutedEventArgs e)
{
RadDateTimePicker dtpicker = (RadDateTimePicker)sender;
dtpicker.SetBinding(RadDateTimePicker.DateTimeTextProperty,
new System.Windows.Data.Binding("dadue")
{
Mode = System.Windows.Data.BindingMode.TwoWay,
Source = dtpicker.ParentOfType<GridViewRow>().Item
});
}
private void dtpEndDate_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e)
{
RadDateTimePicker dtpicker = (RadDateTimePicker)sender;
if (e.RemovedItems.Count > 0 && dtpicker.ParentOfType<GridViewRow>() != null) // end date changed
{
DateTime oldEndDt = Convert.ToDateTime(e.RemovedItems[e.RemovedItems.Count - 1]);
// get opp_task object
opp_task task = dtpicker.ParentOfType<GridViewRow>().Item as opp_task;
if (task != null && e.AddedItems.Count > 0)
{
// change start date similar to due date if due date is less than start date
DateTime newEndDt = Convert.ToDateTime(e.AddedItems[e.AddedItems.Count - 1]);
if (newEndDt.Year > 1 && newEndDt < task.dastart)
task.dastart = newEndDt;
else if (newEndDt.Year == 1)
{
task.dadue = oldEndDt;
}
}
}
}
private void dtPicker_ParseDateTimeValue(object sender, ParseDateTimeEventArgs args)
{
RadDateTimePicker dtPicker = (RadDateTimePicker)sender;
if (dtPicker != null)
{
// check values
string toolTip = dtPicker.TooltipContent.ToString();
string textToParse = args.TextToParse;
DateTime? dtRes = args.Result;
DateTime? dtSel = dtPicker.SelectedValue;
}
}
}
}
Thanks again!
Regards,
LLG