Chirag
Chirag

Reputation: 475

Change Display index of gridview column

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

enter image description here

<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

Answers (1)

Chirag
Chirag

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

Related Questions