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

Datepicker needs double click for manual entry

2 Answers 481 Views
DatePicker
This is a migrated thread and some comments may be shown as answers.
Gerry
Top achievements
Rank 1
Gerry asked on 24 Sep 2009, 06:56 AM

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>

2 Answers, 1 is accepted

Sort by
0
Stefan Dobrev
Telerik team
answered on 29 Sep 2009, 08:11 AM
Hello Gerold,

I was able to implement your request using the new property we have introduced in our latest internal build: EditTriggers on RadGridView. It allows you to specify conditions when RadGridView will start to edit a cell. Please find my updated project attached.

All the best,
Stefan Dobrev
the Telerik team

Instantly find answers to your questions on the new Telerik Support Portal.
Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
0
Gerry
Top achievements
Rank 1
answered on 14 Oct 2009, 08:47 AM
Thank you Stefan

works great now. I had to get the latest build for the EditTriggers.
Tags
DatePicker
Asked by
Gerry
Top achievements
Rank 1
Answers by
Stefan Dobrev
Telerik team
Gerry
Top achievements
Rank 1
Share this question
or