I have a problem that I have not been able to solve.
Because in a gridview we have different data types in the same column, we change the edit template as we go and have discovered that for the datepicker we have to click into it twice before a date can be manually entered. This is a nuisance for our customers, because they enter the data by tabbing through the fields and entering whatever type of data is necessary.
I have prepared a sample below which shows the problem in the "Date" column of the grid. Because I'm setting the CellEditTemplate, the date picker acts differently. In order to enter a date in the "Date" column, you have to click on the cell, then you have to click once more to be eble to type in the date.
Or if you tab through the "Date" column you always have to pick up the mouse again, click into the datepicker and only then can you manually type in the date.
If I did not set the focus for the cell, you would have to click 3 times into the cell to be able to enter a date.
But I'm still missing somethng. Can you help?
Gerry.
Sample Code (Just try to enter dates in the "Date" column of the gridview).
===========
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 System.Collections.ObjectModel;
using Telerik.Windows.Controls.GridView;
using Telerik.Windows.Controls;
namespace GerrySilverlight
{
public partial class UCSimpleGrid : UserControl
{
private ObservableCollection<SimpleRow> SimpleRowList = new ObservableCollection<SimpleRow>();
private SimpleRow _currentRowRec = null;
public UCSimpleGrid()
{
InitializeComponent();
SimpleRow trow1 = new SimpleRow();
trow1.TRName = "Thomas";
trow1.TRLohn = null;
trow1.TRBG = 1000;
trow1.TRZiv = 1;
trow1.TRDate = DateTime.Now;
trow1.TRInteger = 100;
SimpleRowList.Add(trow1);
SimpleRow trow2 = new SimpleRow();
trow2.TRName = "Rolf";
trow2.TRLohn = 140000;
trow2.TRBG = 500;
trow2.TRZiv = 2;
trow2.TRDate = null;
trow2.TRInteger = 200;
SimpleRowList.Add(trow2);
SimpleRow trow3 = new SimpleRow();
trow3.TRName = "Marcel";
trow3.TRLohn = 150000;
trow3.TRBG = 1100;
trow3.TRZiv = 3;
trow3.TRDate = DateTime.Now;
trow3.TRInteger = 300;
SimpleRowList.Add(trow3);
SimpleRow trow4 = new SimpleRow();
trow4.TRName = "Patricia";
trow4.TRLohn = 160000;
trow4.TRBG = 800;
trow4.TRZiv = 4;
trow4.TRDate = DateTime.Now;
trow4.TRInteger = 400;
SimpleRowList.Add(trow4);
SimpleRow trow5 = new SimpleRow();
trow5.TRName = "Patricia";
trow5.TRLohn = 150000;
trow5.TRBG = 700;
trow5.TRZiv = 5;
trow5.TRDate = DateTime.Now;
trow5.TRInteger = 500;
SimpleRowList.Add(trow5);
UIRadGrid.ItemsSource = SimpleRowList;
}
private void UIRadGrid_CurrentCellChanged(object sender, Telerik.Windows.Controls.GridViewCurrentCellChangedEventArgs evt)
{
GridViewCell newCell = evt.NewCell;
DataTemplate templa = LayoutRoot.Resources["UIDatePicker"] as DataTemplate;
UIRadGrid.Columns[4].CellEditTemplate = templa;
UIRadGrid.BeginEdit();
newCell.IsCurrent = true;
newCell.IsInEditMode = true;
newCell.Focus();
RadDatePicker picky = templa.LoadContent() as RadDatePicker;
if (picky != null)
{
picky.Focus();
}
}
private void UIRadDatePicker_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e)
{
SimpleRow rowrec = (sender as FrameworkElement).DataContext as SimpleRow;
if (rowrec == null)
rowrec = _currentRowRec;
if (rowrec != null)
rowrec.TRDate = (sender as RadDatePicker).SelectedDate;
}
private void UIRadGrid_CellEditEnded(object sender, GridViewCellEditEndedEventArgs e)
{
_currentRowRec = UIRadGrid.CurrentCell.ParentRow.DataContext as SimpleRow;
}
}
public class SimpleRow
{
public string TRName { get; set; }
public System.Nullable<decimal> TRLohn { get; set; }
public System.Nullable<decimal> TRBG { get; set; }
public short TRZiv { get; set; }
public System.Nullable<DateTime> TRDate { get; set; }
public int TRInteger { get; set; }
}
}
XAML
====
<UserControl x:Class="GerrySilverlight.UCSimpleGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView"
xmlns:input="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Input"
>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.Resources>
<DataTemplate x:Key="UIDatePicker">
<input:RadDatePicker x:Name="UIRadDatePicker" SelectionChanged="UIRadDatePicker_SelectionChanged"/>
</DataTemplate>
</Grid.Resources>
<StackPanel Grid.Row="1" Orientation="Vertical">
<TextBlock Text="Original Collection"/>
<controls:RadGridView x:Name="UIRadGrid" MultipleSelect="False" ColumnsWidthMode="Auto" AutoGenerateColumns="False"
CanUserFreezeColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False"
ShowGroupPanel="False" IsFilteringAllowed="False" RowIndicatorVisibility="Collapsed"
ShowColumnHeaders="True" ActionOnLostFocus="CommitEdit" Height="200" IsReadOnly="False"
CurrentCellChanged="UIRadGrid_CurrentCellChanged" CellEditEnded="UIRadGrid_CellEditEnded">
<controls:RadGridView.Columns>
<controls:GridViewDataColumn HeaderText="Name" DataMemberBinding="{Binding TRName}" IsReadOnly="True"/>
<controls:GridViewDataColumn HeaderText="Lohn" DataMemberBinding="{Binding TRLohn}" IsReadOnly="True"/>
<controls:GridViewDataColumn HeaderText="BG" DataMemberBinding="{Binding TRBG}" IsReadOnly="True"/>
<controls:GridViewDataColumn HeaderText="Zivilstand" DataMemberBinding="{Binding TRZiv}" IsReadOnly="True"/>
<controls:GridViewDataColumn HeaderText="Date" DataMemberBinding="{Binding TRDate, Mode=TwoWay}"/>
<controls:GridViewDataColumn HeaderText="Integer" DataMemberBinding="{Binding TRInteger}" IsReadOnly="True"/>
</controls:RadGridView.Columns>
</controls:RadGridView>
</StackPanel>
</Grid>
</UserControl>