I've started modifying the Database SDK example to support resources that are not in MSSQL so that we can continue to use our external resources that are in different database formats until we can migrate our entire application.
I've gotten it to load and save the data appropriately to the new AppointmentExternalResources link table, however when I edit an appointment and click save it thinks there are duplicate resources in the this.Resources of the SqlAppointment and then gives an error when saving the ScheduleViewRepository.Context.
I've made the following changes:
Code wise:
public partial class SqlAppointmentExternalResource { #region Constants and Variables short bStat = 0; SqlExternalResource externalResource; #endregion #region Properties public SqlExternalResource ExternalResource { get { if (externalResource == null && !string.IsNullOrEmpty(this.ResourceName)) { externalResource = new SqlExternalResource(); externalResource.ResourceTypeId = this.SqlResourceTypes_SqlResourceTypeId; switch (this.SqlResourceTypes_SqlResourceTypeId) { case 2://load from external database externalResource.ResourceName = "XXX"; externalResource.DisplayName = "DISPLAY_NAME"; break; case 4://load from external database externalResource.ResourceName = "ADMIN"; externalResource.DisplayName = "ADMINISTRATION"; break; } } return externalResource; } set { externalResource = value; this.OnPropertyChanged("ExternalResource"); } } #endregion }public IList Resources{ get { if (this.resources == null) { this.resources = new List<object>(); foreach (var item in this.SqlAppointmentExternalResources.ToList()) this.resources.Add(item.ExternalResource); foreach (var item in this.SqlAppointmentResources.Select(ar => ar.SqlResource).ToList()) this.resources.Add((IResource)item); } return this.resources; }}void IEditableObject.EndEdit(){ #region Standard Telerik Appointment Resources var temp = this.SqlAppointmentResources.ToList(); var resources = this.Resources.OfType<SqlResource>().ToList(); foreach (var item in temp) ScheduleViewRepository.Context.SqlAppointmentResources.DeleteObject(item); foreach (var sqlResource in resources) ScheduleViewRepository.Context.AddToSqlAppointmentResources(new SqlAppointmentResource { SqlAppointment = this, SqlResources_SqlResourceId = sqlResource.SqlResourceId }); #endregion #region External Appointment Resources var temp1 = this.SqlAppointmentExternalResources.ToList(); var externalResources = this.Resources.OfType<SqlExternalResource>().ToList(); foreach (var item in temp1) { ScheduleViewRepository.Context.SqlAppointmentExternalResources.DeleteObject(item); } foreach (var sqlResource in externalResources) { ScheduleViewRepository.Context.AddToSqlAppointmentExternalResources(new SqlAppointmentExternalResource { SqlAppointment = this, SqlResourceTypes_SqlResourceTypeId = sqlResource.ResourceTypeId, ResourceName = sqlResource.ResourceName }); } #endregion var removedExceptionAppointments = this.exceptionAppointments.Except(this.SqlExceptionOccurrences.Select(o => o.Appointment).OfType<SqlExceptionAppointment>()); foreach (var exceptionAppointment in removedExceptionAppointments) { var excResources = exceptionAppointment.SqlExceptionResources.ToList(); foreach (var item in excResources) ScheduleViewRepository.Context.SqlExceptionResources.DeleteObject(item); } ScheduleViewRepository.Context.SaveChanges();}Hi team,
As it's known to most telerik users, we can use Blend to extract the style for each Rad control. And i notice it seems to be with Office black theme. What if i want to extract the style with other themes such as Windows 8? i don't want to go through all files under Themes.Implicit\WPF40\Windows8\Themes. And one of painpoint of using the latter way is for a complex control, i need to scan the whole file to get the whole style of it. So any thoughts?
Yang
I am trying to define the panes for the RadDocking control using its PaneSource binding to an ObservableCollection in a ViewModel and use the SaveLayout and LoadLayout methods to persist the layout of the RadDocking control between sessions. The first question I guess I have is “Should this work?” Does the RadDockingPanesSource and the Save and Load layout methods work together? Below are the important pieces I have created trying to put this together.
<telerik:RadDocking x:Name=”radDocking” PanesSource=”{Binding Panes}”> <telerik:RadSplitContainer InitialPosition=”DockedLeft”> <telerik:RadPaneGroup x:Name=”LeftPaneGroup” /> </telerik:RadSplitContainer > <telerik:RadSplitContainer InitialPosition=”DockedRight”> <telerik:RadPaneGroup x:Name=”RightPaneGroup” /> </telerik:RadSplitContainer > <telerik:RadSplitContainer InitialPosition=”DockedBottom”> <telerik:RadPaneGroup x:Name=”BottomPaneGroup” /> </telerik:RadSplitContainer > <telerik:RadDocking.DockingPanesFactory> <local:MyDockingPanesFactory /> </telerik:RadDocking.DockingPanesFactory></telerik:RadDocking>The XAML above shows the RadDocking control in my MainWindow.xaml file.
public class MyDockingPanesFactory : DockingPanesFactory { protected override void AddPane(RadDocking radDocking, RadPane radPane) { RadDocking.SetSerializationTag(radPane, ((DockPaneViewModel)radPane.DataContext).SerializationTag); RadPaneGroup leftPaneGroup = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == “LeftPaneGroup”) as RadPaneGroup; if (leftPaneGroup != null) { if ((DockPaneViewModel)radPane.DataContext).InitialLocation == DockLocation.DockLeft) { leftPaneGroup.Items.Add(radPane); } } RadPaneGroup rightPaneGroup = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == “RightPaneGroup”) as RadPaneGroup; if (rightPaneGroup != null) { if ((DockPaneViewModel)radPane.DataContext).InitialLocation == DockLocation.DockRight) { rightPaneGroup.Items.Add(radPane); } } RadPaneGroup bottomPaneGroup = radDocking.SplitItems.ToList().FirstOrDefault(i => i.Control.Name == “BottomPaneGroup”) as RadPaneGroup; if (bottomPaneGroup != null) { if ((DockPaneViewModel)radPane.DataContext).InitialLocation == DockLocation.DockBottom) { bottomPaneGroup.Items.Add(radPane); } } } protected override RadPane CreateRadPaneForItem(object item) { if (item is DockPaneViewModel) { return new RadPane() { DataContext = item, Content = item }; } else { throw new ArgumentException(“Invalid Type”); } }}The code above shows my DockingPaneFactory class and how is initially positions my ViewModels as RadPane(s). Notice in CreateRadPaneForItem I am setting the DataContext and the Content of the RadPane to the current DockPaneViewModel in the PanesSource. Setting the Content to the ViewModel will allow binding using a DataTemplate with a DataType defined (this is not shown). My DockPaneViewModel defines several notifiable properties like Header, IsActive, IsHidden, IsPinned, CanDockInDocumentHost, SerializationTag and defines its own InitialLocaiton that is used by the AddPane method in the DockingPaneFactory (above).
public abstract class DockPaneViewModel : ViewModelBase { //Header, IsActive, IsHidden, IsPinned, CanDockInDocumentHost, SerializationTag}The code above is my DockPaneViewModel and which notifiable properties I have defined. These properties are bound their equivalent properties in the RadPane using a Style.
<Application … > <Application.Resources> <ResourceDictionary> <Style TargetType=”{x:Type telerik:RadPane}” BasedOn=”{StaticResource RadPaneStyle}”> <Setter Property=”Header” Value=”{Bindign Header, Mode=TwoWay}” /> <Setter Property=”IsActive” Value=”{Bindign IsActive, Mode=TwoWay}” /> <Setter Property=”IsHidden” Value=”{Bindign IsHidden, Mode=TwoWay}” /> <Setter Property=”IsPinned” Value=”{Bindign IsPinned, Mode=TwoWay}” /> <Setter Property=”CanDockInDocumentHost” Value=”{Bindign CanDockInDocumentHost, Mode=TwoWay}” /> </Style> </ResourceDictionary> </Application.Resources></Application>The code above shows the custom RadPaneStyle that binds the properties in my DockPaneViewModel to the RadPane. This Style is defined in the Application Resources.
private void Application_Startup(object sender, StartupEventArgs e){ MainWindow mainWindow = new MainWindow(); mainWindow.DataContext = new MainWindowViewModel(); mainWindow.Show();}The code above shows how I am creating and showing the MainWindow and setting its DataContext.
public class MainWindowViewModel : ViewModelBase { public ObservableCollection<DockPaneViewModel> Panes { get; private set; } public MainWindowViewModel(){ Panes = new ObservableCollection<DockPaneViewModel>( new ViewModel1(),new ViewModel2(),new ViewModel3() ); }}The code above is my MainWindowViewModel which shows the ObservableColleciton of DockViewModels. I am just showing a hard-coded set of three ViewModels being added to the Panes collection. In the real project I am using an IOC container to create all classes that inherit from DockPaneViewModel which get added to the Panes collection.
private void RadRibbonWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e) { using (System.IO.Stream stream = new System.IO.FileStream(App.LayoutSettings, System.IO.FileMode.Create)){ this.radDocking.SaveLayout(stream); }}protected override void OnSourceInitialized(EventArgs e) { using (System.IO.Stream stream = new System.IO.FileStream(App.LayoutSettings, System.IO.FileMode.Open)) { this.radDocking.LoadLayout(stream); }} Lastly the code above shows closing event and the override for the OnSourceInitialized. This is where I am saving and loading the layout XML file for the RadDocking control. The XML file that gets created does not seem to have any IsPinned properties. At first I thought I forgot to add IsPinned as a notifiable property to the DockPaneViewModel but that was not the case. I also thought I forgot to add IsPinned to the XAML Style that binds the properties between the RadPane and the DockPaneViewModel but that was not the case either.
I am not exactly sure why this is not working. I am not 100% sure if the RadDocking.PanesSource can be used with the SaveLayout and LoadLayout methods. If anyone could give me some direction or advice it would be greatly appreciated. I am not sure what to try next.
Hi,
we want to use the RichTextBox-Control for an CMS editor.
So we want to use it for creating and formatting texts and converting the XAML in HTML via the HtmlFormatProvider.
My question is how I've to design a StyleDefinition so that it will be exportetd as headline tag (h1 h2, ... , h6)?
Hi,
When IsSnapToItemsEnabled and IsSnapToGridEnabled are both true (the default setting), it's not possible to snap to the grid line right after an item line.
Don't know if this is intentional, but it makes it difficult to move everything by 1 grid line when all the nodes are spaced with 2 grid lines in between.. See screenshot to see what I mean.
Regards,
Bayram

public enum MyEnum {A, B, C};public class ClassA{ public string Name { get; set; } public int Count { get; set; } public MyEnum Type { get ;set; }}var filters = new CompositeFilterDescriptorCollection();filters.AddRange(MyRadDataFilter.FilterDescriptors);filters.LogicalOperator = MyRadDataFilter.LogicalOperator;using (var context = new DbContext()){ var result = context.Set<ClassA>().Where(filters); var data = result as IEnumerable<ClassA>; return data.ToList();}public class AddressClass{ public string Country { get; set; } public string City { get; set; }}public enum GenderEnum { Male, Female };public class Person{ public string Name { get; set; } public int Age { get; set; } public GenderEnum Gender { get; set; }}public class Doc{ public DateTime Date { get; set; } public string Content { get; set; } public AddressClass Address { get; set; } public List<Person> Persons { get; set; }}So I have to load Doc's that mathes some filter like that :
All docs, where Address.City is NewYork
or
All docs in which there is a person older than 22 years.
And so I need to give users the ability to set the conditions in the filter.
How could I do?
I would be glad to get a working example project.
Hope to hear from you soon.
Thanks.
Hello,
I have Multiple Format String for columns. I want to binding Multiple DataFormatString for columns. But it doesn't work.
My source:
View
<telerik:RadGridView Name="GridWatchPriceTable" ItemsSource="{Binding ModelData.LstFeeTable}" Style="{DynamicResource GridViewCustomStyle}"
IsReadOnly="False" >
<telerik:RadGridView.Columns>
<telerik:GridViewDataColumn DataMemberBinding="{Binding HighPrice}"
DataFormatString="{Binding NumberDecimalString}"
Header="{StaticResource ListFeeTable_High}" TextAlignment="Right" IsReadOnly="True"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
In ViewModel, I Set value for item in LstFeeTable
private ListPriceTableInfoModel UpdateDataModel(Symbol item, ListPriceTableInfoModel model)
{
model.SymbolId = item.SymbolId;
model.SymbolName = item.ContractName;
var baseSymbolInfo = Operator.Instance.GetBaseSymbolById(item.BaseSymbolId);
if (baseSymbolInfo != null)
{
model.FullName = baseSymbolInfo.FullName;
model.ShortName = baseSymbolInfo.ShortName;
model.BaseSymbolId = baseSymbolInfo.BaseSymbolId;
model.NumberDecimal = baseSymbolInfo.NumbreDecimal;
model.NumberDecimalString = ClientUtils.GetFormatString(baseSymbolInfo,true);
var exchange = Operator.Instance.GetExchangeInfoById(baseSymbolInfo.ExchangeId);
model.Exchange = exchange != null ? exchange.ShortName : "";
}
model.ClosePrice = (decimal)100.6654;
model.OpenPrice = (decimal)100.6654;
model.HighPrice = (decimal)100.6654;
model.LowPrice = (decimal)100.6654;
model.YesterdayClose = (decimal)100.6654;
model.YesterdaySettlement = (decimal)100.6654;
model.TotalVolume = null;
model.NetChg = (decimal)100.6654;
model.NetChgPercent = (decimal)100.6654;
model.VolBid = null;
model.Ask = (decimal)100.6654;
model.VolAsk = null;
model.VolAskOld = null;
model.VolBidOld = null;
model.BidOld = (decimal)100.6654;
model.VolBidOld = null;
model.ClosePriceOld = (decimal)100.6654;
model.LastTrade = (decimal)100.6654;
model.LastTradeOld = (decimal)100.6654;
model.Bid = (decimal)100.6654;
model.BidOld = (decimal)100.6654;
return model;
}
I set property NumberDecimalString with function GetFormatString but it doesn't work. Please Help me
Thank for watching!