Hi,
I would like to use SelectionMode="Extended" for my DataGrid and still be able to navigate through/select rows with arrow keys. Setting IsSynchronizedWithCurrentItem="True", however, disables multiselection. Is there a way to combine the two behaviors?
Thanks for your help
Regards
Simon
I have simple datagrid with numerical columns and when I switch on column filter dialog it is impossible to enter values over 100 or below 0. It looks like that RadNumericBox is limited to range <0,100>. I am able to disable distinct values but nothing else.
For example:
<telerikgrid:RadDataGrid x:Name="MeasuredProfilesDataGrid" ItemsSource="{x:Bind ViewModel.Points}" AutoGenerateColumns="False" SelectionMode="Extended" SelectionUnit="Row" UserGroupMode="Disabled" UserEditMode="Inline">
<telerikgrid:RadDataGrid.Columns>
<telerikgrid:DataGridNumericalColumn PropertyName="StationingUserValue" Header="{x:Bind HeaderViewModel.StationingHeader}" CellContentFormat="{x:Bind HeaderViewModel.StationingFormatString}" ShowDistinctValuesFilter="False"/>
<telerikgrid:DataGridNumericalColumn PropertyName="OffsetXUserValue" Header="{x:Bind HeaderViewModel.OffsetXHeader}" CellContentFormat="{x:Bind HeaderViewModel.LocalDistanceFormatString}" ShowDistinctValuesFilter="False"/>
<telerikgrid:DataGridNumericalColumn PropertyName="OffsetYUserValue" Header="{x:Bind HeaderViewModel.OffsetYHeader}" CellContentFormat="{x:Bind HeaderViewModel.LocalDistanceFormatString}" ShowDistinctValuesFilter="False"/>
<telerikgrid:DataGridNumericalColumn PropertyName="EastingUserValue" Header="{x:Bind HeaderViewModel.EastingHeader}" CellContentFormat="{x:Bind HeaderViewModel.ENHFormatString}" ShowDistinctValuesFilter="False"/>
<telerikgrid:DataGridNumericalColumn PropertyName="NorthingUserValue" Header="{x:Bind HeaderViewModel.NorthingHeader}" CellContentFormat="{x:Bind HeaderViewModel.ENHFormatString}" ShowDistinctValuesFilter="False"/>
<telerikgrid:DataGridNumericalColumn PropertyName="HeightUserValue" Header="{x:Bind HeaderViewModel.HeightHeader}" CellContentFormat="{x:Bind HeaderViewModel.ENHFormatString}" ShowDistinctValuesFilter="False"/>
</telerikgrid:RadDataGrid.Columns>
</telerikgrid:RadDataGrid>
Hi
I have a Datagrid and on double click on an row a detail view for this row is loaded. And when clicking the back button the datagrid view is loaded again. The Viewmodel behind the datagrid is a singleton, so the data is still there.
Now what I want is to preserve the filters of the grid so that a user can set a filter, double click an entry, click the back button and has the filter still set and the data still filtered.
Its a bit tricky but i can do that with Text- and DateTimeFilters by saving the Datagrids Filterdescriptors in the Viewmodel in the OnNavigatedFrom event and setting a cloned version of them in the OnNavigatedTo Event.
But I see no possibility for DistinctValueFilterDescriptors because the actual Data is set in the filter.
Is there a better way to save and load the filter state of a grid?
The SelectedItems in the Documentation is an ObservableCollection but it only has a getter and no setter.
I am able to get SelectedItems like this using interactivity behavior by passing SelectedItems as a command parameter to the ViewModel
But I would like also be able to modify SelectedItems in the ViewModel as well<telerikGrid:RadDataGrid x:Name="UserGrid"
ItemsSource="{x:Bind ViewModel.Source}"
AutoGenerateColumns="False"
RowHeight="25"
SelectionMode="Multiple"
SelectionUnit="Row"
UserGroupMode="Disabled">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedUsersCommand}"
CommandParameter="{x:Bind UserGrid.SelectedItems,Mode=OneWay}"/>
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
<telerikGrid:RadDataGrid.Columns>
<telerikGrid:DataGridTemplateColumn SizeMode="Fixed" Width="10">
<telerikGrid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<StackPanel VerticalAlignment="Center" Margin="5 0 0 0">
<CheckBox/>
</StackPanel>
</DataTemplate>
</telerikGrid:DataGridTemplateColumn.CellContentTemplate>
</telerikGrid:DataGridTemplateColumn>
<telerikGrid:DataGridTextColumn x:Uid="NameColumn" SizeMode="Auto" PropertyName="UserName"/>
<telerikGrid:DataGridTextColumn x:Uid="EmailColumn" SizeMode="Auto" PropertyName="UserEmail"/>
<telerikGrid:DataGridTextColumn x:Uid="DepartmentColumn" SizeMode="Auto" PropertyName="DepartmentName"/>
<telerikGrid:DataGridBooleanColumn x:Uid="UserStatusColumn" SizeMode="Auto" PropertyName="UserActiveIndicator"/>
<telerikGrid:DataGridDateColumn x:Uid="DateCreatedColumn" SizeMode="Auto" PropertyName="RecordCreated" CellContentFormat="{}{0:d}"/>
<telerikGrid:DataGridDateColumn x:Uid="DateModifiedColumn" SizeMode="Auto" PropertyName="RecordModified" CellContentFormat="{}{0:d}"/>
</telerikGrid:RadDataGrid.Columns>
</telerikGrid:RadDataGrid>
In the Grid there are three rows. On the top row is the DataGrid control and on in the middle row there is GridSplitter control then on the bottom is the TabControl.
The requirement is for the GridControl to resize when the GridSplitter resizes the Grid. There should be a MinHeight property set to display a minimum of 6 rows and GridControl should resize.
Current behavior is that GridControl takes all the space and does not resize when the Grid Splitter is moved up or down.
<Page
x:Class="CSA2.Views.SearchUserPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:CSA2.Views"
xmlns:vm="using:CSA2.ViewModels"
xmlns:controls="using:CSA2.Controls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:telerik="using:Telerik.UI.Xaml.Controls"
xmlns:telerikGrid="using:Telerik.UI.Xaml.Controls.Grid"
xmlns:telerikPrimitives="using:Telerik.UI.Xaml.Controls.Primitives"
xmlns:gridPrimitives="using:Telerik.UI.Xaml.Controls.Grid.Primitives"
xmlns:ic="using:Microsoft.Xaml.Interactions.Core"
mc:Ignorable="d">
<Page.Resources>
<ResourceDictionary>
<DataTemplate x:Key="ColumnHeaderCompleteTemplate">
<FontIcon
Margin="0,3,0,0"
FontSize="16"
Glyph="" />
</DataTemplate>
</ResourceDictionary>
</Page.Resources>
<Grid x:Name="ContentArea" Margin="{StaticResource SmallTopBottomMargin}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Margin="0 5 0 5">
<TextBlock x:Uid="SearchUser" Style="{ThemeResource SubtitleTextBlockStyle}"/>
<Border BorderThickness=".5" BorderBrush="LightGray" CornerRadius="2">
<Grid Margin="0 5 0 5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel>
<Grid HorizontalAlignment="Left">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Uid="UserNameText"
Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
Margin="5 0 5 0"/>
<TextBox x:Uid="UserNameNullText"
Grid.Row="0"
Grid.Column="1"
Margin="0 0 5 0"
Width="200"
Text="{x:Bind ViewModel.UserName, Mode=TwoWay}"/>
<TextBlock Grid.Row="0" x:Uid="UserEmailText"
Grid.Column="2"
VerticalAlignment="Center"
Margin="0 0 5 0"/>
<TextBox x:Uid="UserEmailNullText"
Grid.Row="0"
Grid.Column="3"
Width="200"
Text="{x:Bind ViewModel.UserEmail, Mode= TwoWay}"/>
<TextBlock x:Uid="UserRoleText"
Grid.Row="0"
Grid.Column="4"
VerticalAlignment="Center"
Margin="5 0 5 0"/>
<Button Grid.Row="0"
Grid.Column="5"
Margin="0 0 0 0" HorizontalAlignment="Stretch">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Select"
Margin="0 0 10 0" />
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</StackPanel>
</StackPanel>
<Button.Flyout>
<Flyout Placement="Bottom">
<StackPanel Orientation="Vertical">
<ListView x:Name="UserRoles" ItemsSource="{x:Bind ViewModel.UserRoles, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind UserRoles.SelectedItems,Mode=OneWay}"/>
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
<TextBlock x:Uid="UserDepartmentText"
Grid.Row="0"
Grid.Column="6"
VerticalAlignment="Center"
Margin="5 0 5 0"/>
<Button Grid.Row="0"
Grid.Column="7"
Margin="0 0 0 0" HorizontalAlignment="Stretch">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Select"
Margin="0 0 10 0" />
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</StackPanel>
</StackPanel>
<Button.Flyout>
<Flyout Placement="Bottom">
<StackPanel Orientation="Vertical">
<ListView x:Name="UserDepartments" ItemsSource="{x:Bind ViewModel.UserDepartments, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind UserDepartments.SelectedItems,Mode=OneWay}"/>
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
<TextBlock x:Uid="UserFunctionsText"
Grid.Row="0"
Grid.Column="8"
VerticalAlignment="Center"
Margin="5 0 5 0"/>
<Button Grid.Row="0"
Grid.Column="9"
Margin="0 0 0 0" HorizontalAlignment="Stretch">
<StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Select"
Margin="0 0 10 0" />
<FontIcon FontFamily="Segoe MDL2 Assets" Glyph=""/>
</StackPanel>
</StackPanel>
<Button.Flyout>
<Flyout Placement="Bottom">
<StackPanel Orientation="Vertical">
<ListView x:Name="UserFunctions" ItemsSource="{x:Bind ViewModel.UserFunctions, Mode=OneWay}"
SelectionMode="Multiple"
VerticalContentAlignment="Top"
ScrollViewer.IsVerticalRailEnabled="True"
ScrollViewer.VerticalScrollBarVisibility="Visible">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedItemsCommand}"
CommandParameter="{x:Bind UserFunctions.SelectedItems,Mode=OneWay}"/>
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
</ListView>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
<Button Grid.Row="0"
Grid.Column="10"
Margin="5 0 0 0"
Command="{x:Bind ViewModel.SearchCommand}">
<StackPanel Orientation="Horizontal">
<TextBlock x:Uid="SearchButtonText"
Margin="0 0 10 0" />
<SymbolIcon Symbol="Zoom"/>
</StackPanel>
</Button>
<Button Grid.Row="1"
Grid.Column="9"
Command="{x:Bind ViewModel.AddUserCommand}">
<StackPanel Orientation="Horizontal">
<TextBlock x:Uid="CreateNewButtonText" Margin="0 0 20 0"/>
<SymbolIcon Symbol="AddFriend"/>
</StackPanel>
</Button>
<Button Grid.Row="1"
Grid.Column="10"
Margin="5 0 0 0"
Command="{x:Bind ViewModel.ClearCommand}">
<StackPanel Orientation="Horizontal">
<TextBlock x:Uid="ClearButtonText" Margin="0 0 20 0"/>
<SymbolIcon Symbol="Refresh"/>
</StackPanel>
</Button>
</Grid>
</StackPanel>
</Grid>
</Border>
</StackPanel>
<Grid Grid.Row="1" Margin="0 5 0 5">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="10"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<telerikGrid:RadDataGrid x:Name="UserGrid"
MinHeight="150"
ItemsSource="{x:Bind ViewModel.Source}"
AutoGenerateColumns="False"
RowHeight="25"
SelectionMode="Multiple"
SelectionUnit="Row"
UserGroupMode="Disabled">
<i:Interaction.Behaviors>
<ic:EventTriggerBehavior EventName="SelectionChanged">
<ic:InvokeCommandAction
Command="{x:Bind ViewModel.SelectedUsersCommand}"
CommandParameter="{x:Bind UserGrid.SelectedItems,Mode=OneWay}"/>
</ic:EventTriggerBehavior>
</i:Interaction.Behaviors>
<telerikGrid:RadDataGrid.Columns>
<telerikGrid:DataGridTemplateColumn SizeMode="Fixed" Width="20">
<telerikGrid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox/>
</StackPanel>
</DataTemplate>
</telerikGrid:DataGridTemplateColumn.CellContentTemplate>
</telerikGrid:DataGridTemplateColumn>
<telerikGrid:DataGridTextColumn SizeMode="Auto" PropertyName="UserName" Header="Name"/>
<telerikGrid:DataGridTextColumn SizeMode="Auto" PropertyName="UserEmail" Header="Email"/>
<telerikGrid:DataGridTextColumn SizeMode="Auto" PropertyName="DepartmentName" Header="Department"/>
<telerikGrid:DataGridBooleanColumn SizeMode="Auto" PropertyName="UserActiveIndicator" Header="User Status" />
<telerikGrid:DataGridDateColumn SizeMode="Auto" PropertyName="RecordCreated" Header="Date Created" CellContentFormat="{}{0:d}"/>
<telerikGrid:DataGridDateColumn SizeMode="Auto" PropertyName="RecordModified" Header="Date Modified" CellContentFormat="{}{0:d}"/>
</telerikGrid:RadDataGrid.Columns>
</telerikGrid:RadDataGrid>
<telerikPrimitives:RadGridSplitter Grid.Row="1"
ResizeBehavior="BasedOnAlignment"
ResizeDirection="Rows"
HorizontalAlignment="Stretch">
<telerikPrimitives:RadGridSplitter.Element>
<FontIcon FontFamily="{ThemeResource SymbolThemeFontFamily}" Glyph="" FontSize="10"/>
</telerikPrimitives:RadGridSplitter.Element>
</telerikPrimitives:RadGridSplitter>
<Grid Grid.Row="2" Margin="0 2 0 0">
<telerik:RadTabControl>
<telerik:RadTabControl.Items>
<telerik:RadTabItem Header="User Details">
<telerik:RadTabItem.Content>
<controls:AddEditControl x:Name="AddEditControl" DataContext="{x:Bind ViewModel.UserDetailsViewModel}" />
</telerik:RadTabItem.Content>
</telerik:RadTabItem>
<telerik:RadTabItem Header="Tab 2" Content="The content of tab item 2"/>
<telerik:RadTabItem Header="Tab 3" Content="The content of tab item 3"/>
<telerik:RadTabItem Header="Tab 4" Content="The content of tab item 4"/>
</telerik:RadTabControl.Items>
</telerik:RadTabControl>
</Grid>
</Grid>
</Grid>
</Page>
When clicking button inside the DataGrid row the command doesn't get executed in the ViewModel.
Both Page and ViewModel are created by the DI container so I need to be able to pass the POCO object of the row where the button is clicked to the ViewModel.
<telerikGrid:RadDataGrid DataContext="{x:Bind ViewModel}" ItemsSource="{x:Bind ViewModel.Source}" AutoGenerateColumns="False">
<telerikGrid:RadDataGrid.Columns>
<telerikGrid:DataGridTextColumn PropertyName="UserName" Header="User Name"/>
<telerikGrid:DataGridTextColumn PropertyName="UserEmail" Header="User Email"/>
<telerikGrid:DataGridBooleanColumn PropertyName="UserActiveIndicator" Header="User Status" />
<telerikGrid:DataGridDateColumn PropertyName="RecordCreated" Header="Date Created"/>
<telerikGrid:DataGridDateColumn PropertyName="RecordModified" Header="Date Modified"/>
<telerikGrid:DataGridTemplateColumn Header="Edit" Width="81">
<telerikGrid:DataGridTemplateColumn.CellContentTemplate>
<DataTemplate x:DataType="vm:SearchUserViewModel">
<Button x:Name="editButton" Command="{x:Bind EditUserCommand}" CommandParameter="{Binding }">
<SymbolIcon Symbol="Edit"/>
</Button>
</DataTemplate>
</telerikGrid:DataGridTemplateColumn.CellContentTemplate>
</telerikGrid:DataGridTemplateColumn>
</telerikGrid:RadDataGrid.Columns>
</telerikGrid:RadDataGrid>
Hi
I am using the Datagrid with Data Virtualization and I need to implement server side filtering.
So I added the "FilterRequested" command to get the information on how the user wants to filter. I then persist the filters in my viewmodel, clear all data in the datagrids itemsource, send a request to the server and refill the itemsource with the first <batchsize> of the filtered rows. All following requests to the server (e.g.. throug scolling) will use the persisted filter values (and I do the same for sorting). This kind of works so far.
My Problem: I have a column that represents a state in form of an enum. Out of the box I can only filter for distinct states that are in the grid right now, but there are potentially more states in rows that have not been loaded yet. Is there a way to override the distinct filter options with static ones (in my case all enum values)? Even if there is an override, it is probably not possible to figure out which values were selected, because the DistinctValuesFilterDescriptor that is delivered via the FilterRequestContext of the command just gives me all elements that would be left after the filter, not the values selected.
kind regards
Dominik