Reputation: 475
we are using Telerik version = 2012.2.725.1050
Here i am face one gridview problem while change DisplayIndex of gridview column
Click on column, after when click on Left button focus and colum is moved perfectly but when we click on Right button colum is moved but focus is not moved focus must be moved. here i am add my sample project code
thanks in advance for your help
<UserControl x:Class="GridTest.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"
mc:Ignorable="d"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<telerik:RadGridView HorizontalAlignment="Left" x:Name="grdFormList" VerticalAlignment="Top" Grid.Column="0" Grid.Row="0" />
<StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="1">
<Button Content="Left" Height="23" HorizontalAlignment="Left" Name="btnleft" Width="75" Margin="5,0,0,0" Click="btnleft_Click" />
<Button Content="Right" Height="23" HorizontalAlignment="Left" Name="btnright" Width="75" Margin="5,0,0,0" Click="btnright_Click" />
</StackPanel>
</Grid>
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.Controls.GridView;
using Telerik.Windows;
using System.ComponentModel;
using System.Globalization;
using System.Threading;
namespace GridTest
{
public partial class MainPage : UserControl
{
public GridViewCellBase ClickedCell { get; set; }
public MainPage()
{
InitializeComponent();
this.grdFormList.AddHandler(GridViewCellBase.MouseLeftButtonDownEvent, new MouseButtonEventHandler(MouseDownOnCell), true);
grdFormList.Columns.Clear();
for (Int32 attributelength = 0; attributelength < 10; attributelength++)
{
GridViewColumn textColumn = new GridViewColumn();
// DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = string.Format("Column{0}", attributelength + 1);
textColumn.UniqueName = string.Format("Uname{0}", attributelength + 1);
textColumn.MinWidth = 5;
textColumn.Width = 100;
grdFormList.Columns.Add(textColumn);
}
}
private void MouseDownOnCell(object sender, MouseEventArgs args)
{
if (((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>() != null)
{
var aa = ((GridViewHeaderRow)(((GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>()).ParentOfType<GridViewHeaderRow>())).Cells;
for (int i = 0; i < aa.Count; i++)
{
((GridViewCellBase)aa[i]).Background = new SolidColorBrush(Colors.Transparent);
}
this.ClickedCell = null;
this.ClickedCell = (GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>();
LinearGradientBrush brush = new LinearGradientBrush();
brush.StartPoint = new Point(0.5, 0);
brush.EndPoint = new Point(0.5, 1);
GradientStop g1 = new GradientStop();
g1.Color = Color.FromArgb(255, 227, 153, 54);
brush.GradientStops.Add(g1);
GradientStop g2 = new GradientStop();
g2.Color = Color.FromArgb(255, 254, 211, 125);
brush.GradientStops.Add(g2);
((GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>()).Background = brush;
}
}
private void btnleft_Click(object sender, RoutedEventArgs e)
{
if (ClickedCell != null)
{
if (ClickedCell.Column != null)
{
int i = ClickedCell.Column.DisplayIndex;
if (i >= 1)
{
ClickedCell.Column.DisplayIndex = i - 1;
}
}
}
}
private void btnright_Click(object sender, RoutedEventArgs e)
{
if (ClickedCell != null)
{
if (ClickedCell.Column != null)
{
int k = ClickedCell.Column.DisplayIndex;
if (k <= grdFormList.Columns.Count - 1)
{
ClickedCell.Column.DisplayIndex = k + 1;
}
}
}
}
}
}
Upvotes: 0
Views: 1675
Reputation: 475
i am use LayoutUpdated event of gridview and reassign a property and it's working perfect but don't know is this right approach to do it or not
using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using Telerik.Windows.Controls;
using Telerik.Windows.Controls.GridView;
namespace GridTest
{
public partial class MainPage : UserControl
{
public GridViewCellBase ClickedCell { get; set; }
private GridViewHeaderRow GVHeaderRow { get; set; }
private string CellHeader { get; set; }
public MainPage()
{
InitializeComponent();
this.DataContext = this;
this.grdFormList.AddHandler(GridViewCellBase.MouseLeftButtonDownEvent, new MouseButtonEventHandler(MouseDownOnCell), true);
grdFormList.Columns.Clear();
for (Int32 attributelength = 0; attributelength < 10; attributelength++)
{
GridViewColumn textColumn = new GridViewColumn();
// DataGridTextColumn textColumn = new DataGridTextColumn();
textColumn.Header = string.Format("Column{0}", attributelength + 1);
textColumn.UniqueName = string.Format("Uname{0}", attributelength + 1);
textColumn.MinWidth = 5;
textColumn.Width = 100;
grdFormList.Columns.Add(textColumn);
}
}
private void MouseDownOnCell(object sender, MouseEventArgs args)
{
if (((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>() != null)
{
var aa = ((GridViewHeaderRow)(((GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>()).ParentOfType<GridViewHeaderRow>())).Cells;
GVHeaderRow = ((GridViewHeaderRow)(((GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>()).ParentOfType<GridViewHeaderRow>()));
for (int i = 0; i < aa.Count; i++)
{
((GridViewCellBase)aa[i]).Background = new SolidColorBrush(Colors.Transparent);
}
this.ClickedCell = null;
this.ClickedCell = (GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>();
CellHeader = ClickedCell.Column.Header.ToString();
LinearGradientBrush brush = new LinearGradientBrush();
brush.StartPoint = new Point(0.5, 0);
brush.EndPoint = new Point(0.5, 1);
GradientStop g1 = new GradientStop();
g1.Color = Color.FromArgb(255, 227, 153, 54);
brush.GradientStops.Add(g1);
GradientStop g2 = new GradientStop();
g2.Color = Color.FromArgb(255, 254, 211, 125);
brush.GradientStops.Add(g2);
((GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>()).Background = brush;
}
}
private void btnleft_Click(object sender, RoutedEventArgs e)
{
if (ClickedCell != null)
{
if (ClickedCell.Column != null)
{
int i = ClickedCell.Column.DisplayIndex;
if (i >= 1)
{
ClickedCell.Column.DisplayIndex = i - 1;
}
}
}
}
private void btnright_Click(object sender, RoutedEventArgs e)
{
if (ClickedCell != null)
{
if (ClickedCell.Column != null)
{
int k = ClickedCell.Column.DisplayIndex;
if (k < grdFormList.Columns.Count - 1)
{
ClickedCell.Column.DisplayIndex = k + 1;
}
}
}
}
private void grdFormList_LayoutUpdated(object sender, EventArgs e)
{
if (GVHeaderRow != null)
{
var aa = GVHeaderRow.Cells;
for (int i = 0; i < aa.Count; i++)
{
((GridViewCellBase)aa[i]).Background = new SolidColorBrush(Colors.Transparent);
}
////this.ClickedCell = null;
////this.ClickedCell = (GridViewCellBase)((UIElement)args.OriginalSource).ParentOfType<GridViewCellBase>();
LinearGradientBrush brush = new LinearGradientBrush();
brush.StartPoint = new Point(0.5, 0);
brush.EndPoint = new Point(0.5, 1);
GradientStop g1 = new GradientStop();
g1.Color = Color.FromArgb(255, 227, 153, 54);
brush.GradientStops.Add(g1);
GradientStop g2 = new GradientStop();
g2.Color = Color.FromArgb(255, 254, 211, 125);
brush.GradientStops.Add(g2);
ClickedCell = null;
ClickedCell = GVHeaderRow.Cells.Where(a => a.Column.Header.ToString() == CellHeader).ToList()[0];
ClickedCell.Background = brush;
}
}
}
}
Upvotes: 1