The DataGrid control provides a flexible way to display a collection of data in rows and columns. The DataGrid includes built-in column types and a template column for hosting custom content. The built-in row type includes a drop-down details section that you can use to display additional content below the cell values.
Here is a simple style for WPF DataGrid that I want to share with all.
Style features
- Rounded Border
- Gradient DataGridColumnHeader with MouseOver effect
- Custom ValidationErrorTemplate
- DataGridRow MouseOver effect
- DataGridCell IsSelected effect

<!--DataGrid -->
<!--Style and template for the resize control on the DataGridColumnHeader.-->
<Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
<Setter Property="Width"Value="5"/>
<Setter Property="Background"Value="Transparent"/>
<Setter Property="Cursor"Value="SizeWE"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Border Background="{TemplateBinding Background}"Padding="{TemplateBinding Padding}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--Style and template for the DataGridColumnHeader.-->
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background"Value="{DynamicResource NormalBorderBrush}"/>
<Setter Property="Foreground"Value="{DynamicResource TextBrush}"/>
<Setter Property="VerticalContentAlignment"Value="Center"/>
<Setter Property="Height"Value="30"/>
<Setter Property="SeparatorBrush"Value="#FFC9CACA"/>
<Setter Property="FontSize"Value="14"/>
<Setter Property="FontWeight"Value="SemiBold"/>
<Setter Property="Padding"Value="4 0 0 0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<ControlTemplate.Resources>
<Storyboard x:Key="HoverOn">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="Hover"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.2000000"Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="HoverOff">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="Hover"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000"Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</ControlTemplate.Resources>
<Grid Background='Transparent'>
<Grid.ColumnDefinitions>
<ColumnDefinition Width='Auto'/>
<ColumnDefinition Width='Auto'/>
<ColumnDefinition Width='*'/>
<ColumnDefinition Width='Auto'/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="BackgroundRectangle"Grid.ColumnSpan="4"Grid.RowSpan="2"
Fill="{StaticResource NormalBrush}"Stretch="Fill"Stroke="{StaticResource NormalBorderBrush}"StrokeThickness="1"/>
<Rectangle x:Name="Hover"Grid.ColumnSpan="4"Grid.RowSpan="2"Stretch="Fill"
Fill="{StaticResource MouseOverBrush}"Opacity="0"/>
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin='{TemplateBinding Padding}'
Cursor="{TemplateBinding Cursor}"/>
<Path HorizontalAlignment="Left"x:Name="SortArrow"VerticalAlignment="Center"
Width="8"Opacity="0"RenderTransformOrigin=".5,.5"Grid.Column="2"Grid.RowSpan="2"Fill="#FF000000"Stretch="Uniform"Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z ">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX=".9"ScaleY=".9"x:Name="SortIconTransform"/>
</TransformGroup>
</Path.RenderTransform>
</Path>
<Thumb x:Name="PART_LeftHeaderGripper"Grid.Column="0"HorizontalAlignment="Left"Style="{StaticResource ColumnHeaderGripperStyle}"/>
<Thumb x:Name="PART_RightHeaderGripper"Grid.Column="3"HorizontalAlignment="Right"Style="{StaticResource ColumnHeaderGripperStyle}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="SortDirection"Value="Ascending">
<Setter TargetName="SortArrow"Property="Opacity"Value="1"/>
<Setter TargetName="SortArrow"Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="180"/>
</Setter.Value>
</Setter>
<Setter TargetName="BackgroundRectangle"Property="Opacity"Value="1"/>
</Trigger>
<Trigger Property="SortDirection"Value="Descending">
<Setter TargetName="SortArrow"Property="Opacity"Value="1"/>
<Setter TargetName="BackgroundRectangle"Property="Opacity"Value="1"/>
</Trigger>
<Trigger Property="IsMouseOver"Value="true">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource HoverOn}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource HoverOff}"/>
</Trigger.ExitActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!--Style and template for the DataGridColumnHeadersPresenter.-->
<Style TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeadersPresenter}">
<Grid>
<DataGridColumnHeader x:Name="PART_FillerColumnHeader"IsHitTestVisible="False"/>
<ItemsPresenter />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid>
<Rectangle x:Name="Border"Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"SnapsToDevicePixels="True"/>
<Polygon x:Name="Arrow"Fill="Black"HorizontalAlignment="Right"Margin="8,8,3,3"Opacity="0.15"Points="0,10 10,10 10,0"Stretch="Uniform"VerticalAlignment="Bottom"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"Value="True">
<Setter Property="Stroke"TargetName="Border"Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
</Trigger>
<Trigger Property="IsPressed"Value="True">
<Setter Property="Fill"TargetName="Border"Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/>
</Trigger>
<Trigger Property="IsEnabled"Value="False">
<Setter Property="Visibility"TargetName="Arrow"Value="Collapsed"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type DataGrid}">
<Setter Property="Background"Value="{StaticResource ControlContentBrush}"/>
<Setter Property="RowDetailsVisibilityMode"Value="VisibleWhenSelected"/>
<Setter Property="ScrollViewer.CanContentScroll"Value="true"/>
<Setter Property="ScrollViewer.PanningMode"Value="Both"/>
<Setter Property="Stylus.IsFlicksEnabled"Value="False"/>
<Setter Property="Margin"Value="5"/>
<Setter Property="BorderBrush"Value="{StaticResource NormalBorderBrush}"/>
<Setter Property="AlternatingRowBackground"Value="{StaticResource AlternateBackgroundBrush}"/>
<Setter Property="HorizontalGridLinesBrush"Value="{StaticResource NormalBorderBrush}"/>
<Setter Property="VerticalGridLinesBrush"Value="{StaticResource NormalBorderBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGrid}">
<Border BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="2"CornerRadius="5"Background="{TemplateBinding Background}"Padding="{TemplateBinding Padding}"SnapsToDevicePixels="True">
<ScrollViewer x:Name="DG_ScrollViewer"Focusable="false">
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Command="{x:Static DataGrid.SelectAllCommand}"Focusable="false"Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"Width="{Binding CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
<DataGridColumnHeadersPresenter x:Name="PART_ColumnHeadersPresenter"Grid.Column="1"Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
<ScrollContentPresenter x:Name="PART_ScrollContentPresenter"CanContentScroll="{TemplateBinding CanContentScroll}"Grid.ColumnSpan="2"Grid.Row="1"/>
<ScrollBar x:Name="PART_VerticalScrollBar"Grid.Column="2"Maximum="{TemplateBinding ScrollableHeight}"Orientation="Vertical"Grid.Row="1"Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"Value="{Binding VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"ViewportSize="{TemplateBinding ViewportHeight}"/>
<Grid Grid.Column="1"Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ScrollBar x:Name="PART_HorizontalScrollBar"Grid.Column="1"Maximum="{TemplateBinding ScrollableWidth}"Orientation="Horizontal"Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"Value="{Binding HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"ViewportSize="{TemplateBinding ViewportWidth}"/>
</Grid>
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsGrouping"Value="true">
<Setter Property="ScrollViewer.CanContentScroll"Value="false"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="SnapsToDevicePixels"Value="true"/>
<Setter Property="Validation.ErrorTemplate"Value="{x:Null}"/>
<Setter Property="ValidationErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Ellipse Width="12"Height="12"Margin="0 2 0 0"
Fill="Red"Stroke="Black"VerticalAlignment="Top"
StrokeThickness="0.5"/>
<TextBlock FontWeight="Bold"Padding="4,0,0,0"
VerticalAlignment="Top"Foreground="White"Text="!"
ToolTip="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRow}">
<ControlTemplate.Resources>
<Storyboard x:Key="SelectedOn">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="select_gradient"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.1000000"Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="SelectedOff">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="select_gradient"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000"Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="HoverOn">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="hover_gradient"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.1000000"Value="0.85"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="highlight"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.1000000"Value="0.65"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="HoverOff">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="hover_gradient"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000"Value="0"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="highlight"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000"Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</ControlTemplate.Resources>
<Border x:Name="DGR_Border"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}"SnapsToDevicePixels="True">
<SelectiveScrollingGrid>
<SelectiveScrollingGrid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</SelectiveScrollingGrid.ColumnDefinitions>
<SelectiveScrollingGrid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</SelectiveScrollingGrid.RowDefinitions>
<Rectangle x:Name="hover_gradient"Stroke="{DynamicResource FocusBrush}"StrokeThickness="1"RadiusX="1"RadiusY="1"Opacity="0"IsHitTestVisible="False"Grid.Column="1"Fill="{DynamicResource MouseOverBrush}"/>
<Rectangle x:Name="highlight"Margin="1"StrokeThickness="1"RadiusX="0.5"RadiusY="0.5"Opacity="0"IsHitTestVisible="False"Grid.Column="1"Stroke="{DynamicResource MouseOverHighlightBrush}"Fill="{DynamicResource MouseOverHighlightBrush}"/>
<Rectangle x:Name="select_gradient"Grid.Row="0"Grid.ColumnSpan="2"StrokeThickness="1"RadiusX="1"RadiusY="1"Opacity="0"IsHitTestVisible="False"Fill="{DynamicResource PressedBrush}"Stroke="{DynamicResource PressedBorderBrush}"/>
<DataGridCellsPresenter Grid.Column="1"ItemsPanel="{TemplateBinding ItemsPanel}"SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
<DataGridDetailsPresenter Grid.Column="1"Grid.Row="1"SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"Visibility="{TemplateBinding DetailsVisibility}"/>
<DataGridRowHeader Grid.RowSpan="2"SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical"Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
</SelectiveScrollingGrid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver"Value="True"SourceName="DGR_Border">
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource HoverOff}"x:Name="HoverOff_BeginStoryboard"/>
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource HoverOn}"x:Name="HoverOn_BeginStoryboard"/>
</Trigger.EnterActions>
</Trigger>
<Trigger Property="IsSelected"Value="true">
<Trigger.ExitActions>
<BeginStoryboard x:Name="SelectedOff_BeginStoryboard"Storyboard="{StaticResource SelectedOff}"/>
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectedOn}"/>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<ControlTemplate.Resources>
<Storyboard x:Key="SelectedOn">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="select_gradient"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.1000000"Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="SelectedOff">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00"Storyboard.TargetName="select_gradient"Storyboard.TargetProperty="(UIElement.Opacity)">
<SplineDoubleKeyFrame KeyTime="00:00:00.3000000"Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</ControlTemplate.Resources>
<Border BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}"SnapsToDevicePixels="True">
<Grid>
<Rectangle x:Name="select_gradient"Margin="-2 -1 -2 -1"Grid.Column="1"StrokeThickness="1"RadiusX="1"RadiusY="1"Opacity="0"IsHitTestVisible="False"Fill="{DynamicResource PressedBrush}"Stroke="{DynamicResource PressedBorderBrush}"/>
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected"Value="true">
<Trigger.ExitActions>
<BeginStoryboard x:Name="SelectedOff_BeginStoryboard"Storyboard="{StaticResource SelectedOff}"/>
</Trigger.ExitActions>
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource SelectedOn}"/>
</Trigger.EnterActions>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<BooleanToVisibilityConverter x:Key="bool2VisibilityConverter" />
<Style x:Key="RowHeaderGripperStyle" TargetType="{x:Type Thumb}">
<Setter Property="Height"Value="8"/>
<Setter Property="Background"Value="Transparent"/>
<Setter Property="Cursor"Value="SizeNS"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Border Background="{TemplateBinding Background}"Padding="{TemplateBinding Padding}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type DataGridRowHeader}">
<Setter Property="Width"Value="20"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridRowHeader}">
<Grid>
<Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"Background="{TemplateBinding Background}"IsPressed="{TemplateBinding IsPressed}"IsHovered="{TemplateBinding IsMouseOver}"IsSelected="{TemplateBinding IsRowSelected}"Orientation="Horizontal"Padding="{TemplateBinding Padding}"SeparatorBrush="{TemplateBinding SeparatorBrush}"SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
<StackPanel Orientation="Horizontal">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"VerticalAlignment="Center"/>
<Control SnapsToDevicePixels="false"Template="{Binding ValidationErrorTemplate, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"Visibility="{Binding (Validation.HasError), Converter={StaticResource bool2VisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}}"/>
</StackPanel>
</Microsoft_Windows_Themes:DataGridHeaderBorder>
<Thumb x:Name="PART_TopHeaderGripper"Style="{StaticResource RowHeaderGripperStyle}"VerticalAlignment="Top"/>
<Thumb x:Name="PART_BottomHeaderGripper"Style="{StaticResource RowHeaderGripperStyle}"VerticalAlignment="Bottom"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
rizki fauzanPosted Oct 7, 2020, 1:37 AM
Thank you , it working for me :)
Aousaf rashidPosted Dec 26, 2018, 5:18 AM
The columns are not re-sizable, how to fix it?
Sabbir AhmedPosted Apr 6, 2017, 7:43 AM
Where I will use it?
Sabbir AhmedPosted Apr 6, 2017, 7:43 AM
Hey how can I use this code?
Ena JainPosted Jun 16, 2016, 4:18 AM
I would like to know how i can set the arrow image from some resource file in "sort arrow" property?
GuruPrasadh BMPosted Apr 27, 2016, 8:43 AM
Thanks Nipun! Nice article!
vladanPosted Mar 17, 2016, 2:48 PM
Excellent example how to use ValidationErrorTemplate. I'm looking for this example for a long time
Joshua EganPosted Jan 27, 2014, 9:08 PM
Thanks for the post! I went through several places before finding this post, and reading through your code helped me finally figure out how to create my own styling for my data grid.
Nipun TomarPosted Oct 4, 2013, 11:22 AM
Thanks to all.
binh minhPosted Aug 6, 2013, 5:34 AM
It's Beautiful! Thankyou so much!
ali hassanabadiPosted Dec 18, 2012, 7:25 AM
Nice work.
burak yilmazPosted Nov 27, 2012, 10:03 PM
thank you very good
James liPosted Nov 11, 2012, 9:59 AM
Great article man
Ramesh DuraiPosted Aug 9, 2012, 6:11 AM
Nice article :) Thanks !!
Alma MuratovicPosted Jul 10, 2012, 3:30 PM
Great! Thanks a lot!!!
abbass abbassPosted Jun 26, 2012, 10:39 AM
Thanks a lot :)
FAHMI BouchraPosted Jun 5, 2012, 6:57 PM
Hi Nipun ,Thank You So Much :)
yogendra singhPosted May 16, 2012, 3:12 AM
How to set Column center align horizontally and vertically in this script.
Khaniya SunilPosted Jan 28, 2011, 6:10 AM
Thanks for sharing it
Jacky LeePosted Jan 7, 2011, 9:44 AM
like it