I have created a custom data row and a custom data table class by extending both MyDataRow and MyDataTable classes. MyDataRow and MyDataTable are defined in my data set file (.xsd). I.e., I'm using a real database. MyDataTable has a few fields (Id, Status, DateCreated, etc...).
In XAML, I have set RadGridView control's ItemsSource property to a DataView object (bound to ViewModel's property). In short, new MyDataTable().DefaultView. Naturally it's been filled with data from the database before getting the DefaultView.
The reason why I created the custom classes was that I want to add additional property (IsReadOnly) to be used together with IsReadOnlyBinding and I don't want to change the database or the data set file structure.
This is how I have created the custom classes (the second answer): https://stackoverflow.com/questions/3101412/how-to-extend-datarow-and-datatable-in-c-sharp-with-additional-properties-and-me
When I set grid's IsReadOnlyBinding="{Binding IsReadOnly}", an exception is thrown when try to add a new row or edit an existing one. The exception says: Property with specified name: IsReadOnly cannot be found on component: System.Data.DataRowView
However, if I set IsReadOnlyBinding="{Binding Status}", it works. Status field already exist in my database table.
Is the grid using internally the data set schema (.xsd) or what might cause this? Any ideas how to solve this?
I am trying to accomplish functionality where rows cannot be edited until I click a modify button (which sets IsReadOnly to false for the selected row) but I still want to add new rows using the grid's new row button.
I wish I could attach actual code but there's a lot of it and it's not easy to copy-paste it here. I could try to put together a test project if my description is not clear enough.

I've been banging my head everywhere trying to figure out how to hide values bound to a GridViewComboBox column.
I'm using ItemsSourceBinding to populate the dropdown with values and then matching up to default values from ItemsSource. Basically some of the values that are prepopulated from another system like "Approved" or "New" I want to not make those options selectable when the user tries to edit the cell even though they can see them.
<telerik:RadGridView VerticalAlignment="Stretch" Grid.Row="1" x:Name="PoliciesGridView" ItemsSource="{Binding Policies, Mode=TwoWay}" AutoGenerateColumns="False" DataLoaded="PoliciesGridView_DataLoaded" SelectionMode="Extended" ScrollViewer.VerticalScrollBarVisibility="Visible" CellEditEnded="CellEditEnded" GroupRenderMode="Flat" CanUserDeleteRows="False" Grouped="Grid_Grouped" KeyUp="HandleKeyUpEvent">
<telerik:EventToCommandBehavior.EventBindings>
<telerik:EventBinding Command="{Binding EditCommand}" EventName="BeginningEdit" PassEventArgsToCommand="True"/>
</telerik:EventToCommandBehavior.EventBindings>
<telerik:GridViewComboBoxColumn DataMemberBinding="{Binding CurrentStatus, Mode=TwoWay}" Tag="CurrentStatus" Header="Status" ItemsSourceBinding="{Binding PolicyStatusCodeTable}" DisplayMemberPath="PolicyStatusDsc" SelectedValueMemberPath="PolicyStatusDsc" CellStyleSelector="{StaticResource editedCellStyle }" TextAlignment="Right"/>
I have been successful in setting up an EditCommand to cancel the edit if the Status is Approved thereby making any rows that are Approved read-only as well as reverting the value back to the original value should they choose Approved. It's a hack but I feel like there should be a way to just hide those options from the gridviewcombobox so users can't select them.
So i have this model:
public class MachineNetworkAdapter{ public string Name { get; set; } public string IpAddress { get; set; } public static List<MachineNetworkAdapter> MachineAdapters;}
So each mechine adapter have this members.
So i have this Combobox that show all my Machine Adapters:
<ComboBox Name="cbAdapterss" ItemsSource="{Binding MachineAdapters}" SelectionChanged="cbInterfaces_SelectionChanged"/>
So in this case i can see all my machine adapters with this properties.
Now i want to see also my adapters Rate in MBit/sec so i added this members:
public Series { get; set; } public double Rate { get; set; }
the member Rate is MBit/sec and the value is changing every 1 sec. the series is for the chart in order to put into the values.
So i added template with chartand now this is my Combobox:
<ComboBox Name="cbAdapters" ItemsSource="{Binding MachineAdapters}" SelectionChanged="cbInterfaces_SelectionChanged"> <ComboBox.ItemTemplate> <DataTemplate> <telerik:RadCartesianChart x:Name="chartTemplate"/> </DataTemplate> </ComboBox.ItemTemplate></ComboBox>
So now all i can see in my Combobox is an empty chart without the other properties. So my question is how can i populate my chart and also see the other properties (Name, IPAddress).

Hello,
I have some slides in my Sort View with a drag and drop functionality. When I wanted to drag and drop the slides its working fine, but when I was trying to move the 'last slide" it's showing that drag after the "last slide".
Please give me an idea to get rid of that text for only last slide. It has to show up to last but one slides but I don't want this for last slide, it's only happening when Im having the scrollbar at the bottom. Here I'm attaching the screenshots of the issue please go through them, and if you can give me suggestion that would be great for me.
Thank you,
Naga.

I identified performance loss while using Alternating rows.
Based on already existing posts: http://www.telerik.com/forums/alternating-rows-hurts-performance
I implemented my own RowStyle selector:
public class RadGridViewAlternatingRowTemplateSelector : StyleSelector
{
private static int counter = int.MinValue;
public override Style SelectStyle(object item, DependencyObject container)
{
return (counter++ % 2) == 0 ? EvenRowStyle : OddRowStyle;
}
public Style EvenRowStyle { get; set; }
public Style OddRowStyle { get; set; }
}
I tried to keep it as short and simple as possible for a maximum performance.
<template:RadGridViewAlternatingRowTemplateSelector x:Key="AlternativeRowStyleSelector">
<template:RadGridViewAlternatingRowTemplateSelector.EvenRowStyle>
<Style TargetType="telerik:GridViewRow" BasedOn="{StaticResource GridViewRowStyle}">
<Setter Property="Background" Value="{DynamicResource RowBackgroundColor}"/>
</Style>
</template:RadGridViewAlternatingRowTemplateSelector.EvenRowStyle>
<template:RadGridViewAlternatingRowTemplateSelector.OddRowStyle>
<Style TargetType="telerik:GridViewRow" BasedOn="{StaticResource GridViewRowStyle}">
<Setter Property="Background" Value="{DynamicResource SecondRowBackgroundColor}"/>
</Style>
</template:RadGridViewAlternatingRowTemplateSelector.OddRowStyle>
</template:RadGridViewAlternatingRowTemplateSelector>
<Style TargetType="{x:Type telerik:RadGridView}" BasedOn="{StaticResource RadGridViewStyle}">
<Setter Property="RowStyleSelector" Value="{StaticResource AlternativeRowStyleSelector}" />
<Setter Property="GridLinesVisibility" Value="Vertical" />
<Setter Property="ValidatesOnDataErrors" Value="InEditMode" />
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="ShowGroupPanel" Value="False" />
<!--<Setter Property="ShowColumnSortIndexes" Value="False" />-->
<!--This is not possible, because no DP!-->
<Setter Property="RowIndicatorVisibility" Value="Collapsed" />
<Setter Property="IsFilteringAllowed" Value="False" />
<Setter Property="CanUserSortColumns" Value="False" />
<Setter Property="CanUserSortGroups" Value="False" />
<Setter Property="CanUserReorderColumns" Value="False" />
<Setter Property="CanUserResizeColumns" Value="False" />
<Setter Property="CanUserResizeRows" Value="False" />
<Setter Property="CanUserFreezeColumns" Value="False" />
<Setter Property="FontSize" Value="{DynamicResource FontSize}" />
<Setter Property="FontFamily" Value="{DynamicResource FontFamily}" />
<Setter Property="EnableColumnVirtualization" Value="False" />
<Setter Property="EnableRowVirtualization" Value="True" />
<Setter Property="GroupRenderMode" Value="Flat" />
</Style>
In addition, I tried using NoXAML assemblies (as you can see at my style definition) to even squeeze more performance out of Telerik controls.
Summary: NoXAML Assemblies, Own Style Selector, GroupRenderMode Flat, other properties in Style, RadGridView in * Grid Row,...
There isn't any single point left I could optimize (refering to this article: http://docs.telerik.com/devtools/wpf/controls/radgridview/troubleshooting/performance)
The performance is pretty damn nice if I use no alternating rows.
But when I use them (and I definitely have to, with or without Telerik) the performance drops to an unacceptable point.
So my question here is: Is there anything I can do to speed things up? Are there any updates on alternating row performance?
Thanks in advance
Is there a way to create a maskeditfield when using AutoGeneratingField on a DataForm?
I see one example of switching to a new field type in your documentation:
e.DataField = new DataFormNumericUpDownField() { Label = e.DataField.Label, DataMemberBinding = e.DataField.DataMemberBinding };
However DataFormNumericUpDownField does not seem to exist not to mention it does not sound like the type of field I am looking for.
Is there a way to switch to a Mask Edit control in the AutoGeneratingField event?
If so, can you show an example of this?
Thanks...

Hi. I am using RadMap with a UriImageProvider to fetch a tile from a given URI. Is there a way to get a callback when the image from the URI has been downloaded?
Some images can be very large and slow to download in slower internet speeds. Currently I have no way to determine if the image is indeed downloading or not, or how long to wait for it to complete.
Cheers
Richard

Hi,
i'm look for a possibility to create a "Multi-Platform-App" running on Windwos-Pc, Tablet/Handy (ioS, Android) using on App Buidlder.
Is there a way to do this with Telerik Tools?
Thanks
BEST REGARDS
RENE

Hi,
I would like create a link programmaticaly with a shape and i would like to specify connector for source and target.
Capture1 is what a want
Capture2 is what i have actually

Greeting,
I am currently working on an interface which resembles Visual Studio. We use a lot of Panes and in one of them we added a PanelBar with PanelBarItems in it. In each PanelBarItem, we use a different UserControl where we add label and NumericUpDown. Everything works great as expected but during runtime, the ContentControl adds a big margin. Our GUI will be heavy in term of controls and we need to reduce this margin to make more space for them. I tried following the instructions online to modify the styling of the PanelBarItem but to no avail. While some modifications affect the end result, I cannot change the margin of the ControlContent.
Here is the code in the pane :
<telerik:RadPanelBar Margin="0" VerticalAlignment="Top"> <telerik:RadPanelBarItem Header="Integration Mesure" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Style="{DynamicResource myWay}"> <Grid HorizontalAlignment="Left" VerticalAlignment="Top"> <hop:hopIntegration Margin="0"/> </Grid> </telerik:RadPanelBarItem>
And here is the code for the styling.
001.<Style x:Key="myWay" TargetType="{x:Type telerik:RadPanelBarItem}">002. <Setter Property="MaterialControls:MaterialAssist.MouseOverBrush" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.AlternativeBrush}}"/>003. <Setter Property="MaterialControls:MaterialAssist.PressedBrush" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.ComplementaryBrush}}"/>004. <Setter Property="MaterialControls:MaterialAssist.CheckedBrush" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.DividerBrush}}"/>005. <Setter Property="MaterialControls:MaterialAssist.ShadowDepth" Value="Depth1"/>006. <Setter Property="TextOptions.TextRenderingMode" Value="ClearType"/>007. <Setter Property="ExpanderStyle">008. <Setter.Value>009. <Style TargetType="{x:Type TextBlock}">010. <Setter Property="telerik:GlyphAdorner.ShowGlyphInDesignTime" Value="True"/>011. <Setter Property="Grid.Column" Value="5"/>012. <Setter Property="Margin" Value="16,0"/>013. <Setter Property="HorizontalAlignment" Value="Right"/>014. <Setter Property="VerticalAlignment" Value="Center"/>015. <Setter Property="Foreground" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.MarkerBrush}}"/>016. <Setter Property="Opacity" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.PrimaryOpacity}}"/>017. <Setter Property="Text" Value=""/>018. <Setter Property="FontFamily" Value="/Telerik.Windows.Controls;component/Themes/Fonts/TelerikWebUI.ttf#TelerikWebUI"/>019. <Setter Property="FontSize" Value="16"/>020. <Setter Property="Opacity" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.PrimaryOpacity}}"/>021. <Setter Property="FontStyle" Value="Normal"/>022. <Setter Property="FontWeight" Value="Normal"/>023. </Style>024. </Setter.Value>025. </Setter>026. <Setter Property="Template">027. <Setter.Value>028. <ControlTemplate TargetType="{x:Type telerik:RadPanelBarItem}">029. <Grid x:Name="RootElement">030. <Grid.RowDefinitions>031. <RowDefinition Height="Auto"/>032. <RowDefinition Height="*"/>033. </Grid.RowDefinitions>034. <Grid x:Name="HeaderRow" Background="Transparent" Margin="0" MinHeight="{TemplateBinding MinHeight}">035. <Border x:Name="BorderVisual" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{Binding Background, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type telerik:RadPanelBar}}}" Grid.RowSpan="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>036. <MaterialControls:MaterialControl IsSmartClipped="True">037. <ContentControl x:Name="Header" ContentTemplate="{TemplateBinding HeaderTemplate}" Foreground="{Binding Foreground, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" FontWeight="{TemplateBinding FontWeight}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>038. </MaterialControls:MaterialControl>039. </Grid>040. <Grid x:Name="ItemsContainer" Grid.Row="1" Visibility="Collapsed">041. <ItemsPresenter/>042. </Grid>043. </Grid>044. <ControlTemplate.Triggers>045. <Trigger Property="IsExpanded" Value="True">046. <Setter Property="Visibility" TargetName="ItemsContainer" Value="Visible"/>047. </Trigger>048. <Trigger Property="IsEnabled" Value="False">049. <Setter Property="Opacity" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.DisabledOpacity}}"/>050. </Trigger>051. <Trigger Property="IsSelected" Value="True">052. <Setter Property="Foreground" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.PrimaryNormalBrush}}"/>053. </Trigger>054. </ControlTemplate.Triggers>055. </ControlTemplate>056. </Setter.Value>057. </Setter>058. <Setter Property="Background" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.MainBrush}}"/>059. <Setter Property="BorderBrush" Value="Transparent"/>060. <Setter Property="BorderThickness" Value="0"/>061. <Setter Property="Padding" Value="16,16,16,15"/>062. <Setter Property="FocusVisualStyle" Value="{x:Null}"/>063. <Setter Property="HorizontalContentAlignment" Value="Stretch"/>064. <Setter Property="VerticalContentAlignment" Value="Stretch"/>065. <Setter Property="ChildItemsTemplate">066. <Setter.Value>067. <ControlTemplate TargetType="{x:Type telerik:RadPanelBarItem}">068. <Grid x:Name="RootElement">069. <Grid.RowDefinitions>070. <RowDefinition Height="Auto"/>071. <RowDefinition Height="*"/>072. </Grid.RowDefinitions>073. <Grid x:Name="HeaderRow" Background="Transparent" Margin="0" MinHeight="{TemplateBinding MinHeight}">074. <Border x:Name="BorderVisual" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{Binding Background, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type telerik:RadPanelBar}}}" Grid.RowSpan="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>075. <MaterialControls:MaterialControl IsSmartClipped="True">076. <ContentControl x:Name="Header" ContentTemplate="{TemplateBinding HeaderTemplate}" Foreground="{Binding Foreground, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" FontWeight="{TemplateBinding FontWeight}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>077. </MaterialControls:MaterialControl>078. </Grid>079. <Grid x:Name="ItemsContainer" Grid.Row="1" Visibility="Collapsed">080. <ItemsPresenter/>081. </Grid>082. </Grid>083. <ControlTemplate.Triggers>084. <Trigger Property="IsExpanded" Value="True">085. <Setter Property="Visibility" TargetName="ItemsContainer" Value="Visible"/>086. </Trigger>087. <Trigger Property="IsEnabled" Value="False">088. <Setter Property="Opacity" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.DisabledOpacity}}"/>089. </Trigger>090. <Trigger Property="IsSelected" Value="True">091. <Setter Property="Foreground" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.PrimaryNormalBrush}}"/>092. </Trigger>093. </ControlTemplate.Triggers>094. </ControlTemplate>095. </Setter.Value>096. </Setter>097. <Setter Property="KeyboardNavigation.TabNavigation" Value="Local"/>098. <Setter Property="SnapsToDevicePixels" Value="True"/>099. <Setter Property="ItemsPanel">100. <Setter.Value>101. <ItemsPanelTemplate>102. <telerik:PanelBarPanel IsItemsHost="True"/>103. </ItemsPanelTemplate>104. </Setter.Value>105. </Setter>106. <Style.Triggers>107. <Trigger Property="Level" Value="1">108. <Setter Property="Template">109. <Setter.Value>110. <ControlTemplate TargetType="{x:Type telerik:RadPanelBarItem}">111. <Grid x:Name="RootElement">112. <Grid.RowDefinitions>113. <RowDefinition Height="Auto"/>114. <RowDefinition Height="*"/>115. </Grid.RowDefinitions>116. <MaterialControls:Shadow Background="{TemplateBinding Background}" Grid.RowSpan="2" ShadowDepth="{TemplateBinding MaterialControls:MaterialAssist.ShadowDepth}"/>117. <Border x:Name="BorderVisual" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.RowSpan="2" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>118. <MaterialControls:MaterialControl x:Name="Ripple" IsSmartClipped="True">119. <Grid x:Name="HeaderRow" Background="#01FFFFFF" UseLayoutRounding="True">120. <Grid.ColumnDefinitions>121. <ColumnDefinition Width="Auto"/>122. <ColumnDefinition Width="Auto"/>123. <ColumnDefinition Width="Auto"/>124. <ColumnDefinition Width="*"/>125. <ColumnDefinition Width="Auto"/>126. </Grid.ColumnDefinitions>127. <TextBlock x:Name="arrow" Style="{TemplateBinding ExpanderStyle}"/>128. <ContentControl x:Name="Header" Grid.ColumnSpan="4" ContentTemplate="{TemplateBinding HeaderTemplate}" ContentStringFormat="{TemplateBinding HeaderStringFormat}" Foreground="{Binding Foreground, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}" FontWeight="{TemplateBinding FontWeight}" FontSize="{TemplateBinding FontSize}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>129. </Grid>130. </MaterialControls:MaterialControl>131. <Grid x:Name="ItemsContainer" Grid.Row="1" Visibility="Collapsed">132. <telerik:LayoutTransformControl x:Name="transformationRoot" IsTabStop="False">133. <ItemsPresenter/>134. </telerik:LayoutTransformControl>135. </Grid>136. </Grid>137. <ControlTemplate.Triggers>138. <Trigger Property="IsExpanded" Value="True">139. <Setter Property="Text" TargetName="arrow" Value=""/>140. <Setter Property="Foreground" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.PrimaryNormalBrush}}"/>141. <Setter Property="Visibility" TargetName="ItemsContainer" Value="Visible"/>142. <Setter Property="Margin" Value="0,8"/>143. </Trigger>144. <Trigger Property="IsEnabled" Value="False">145. <Setter Property="Opacity" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.DisabledOpacity}}"/>146. <Setter Property="Opacity" TargetName="arrow" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.DisabledOpacity}}"/>147. </Trigger>148. <Trigger Property="IsSelected" Value="True">149. <Setter Property="Foreground" TargetName="Header" Value="{telerik:MaterialResource ResourceKey={x:Static telerik:MaterialResourceKey.PrimaryPressedBrush}}"/>150. </Trigger>151. <Trigger Property="IsMouseOver" SourceName="Ripple" Value="True">152. <Setter Property="MaterialControls:MaterialAssist.ShadowDepth" Value="Depth2"/>153. </Trigger>154. </ControlTemplate.Triggers>155. </ControlTemplate>156. </Setter.Value>157. </Setter>158. </Trigger>159. </Style.Triggers>160. </Style>
I changed the margin at line 37 and line 76 for zero but it seems that they are overwritten by something else. I added in attachment an image showing the Visual tree during runtime and where the margin is added. I am fairly new to styling but any help would be greatly appreciated.
Thank you