Completed
Last Updated: 16 May 2019 06:05 by ADMIN
Created by: Stephen
Comments: 3
Category: Spreadsheet
Type: Feature Request
0

I have loaded an excel file into the spreadsheet control from our document database. When a user makes changes and clicks the save button I would like to handle a save process back to our document database of the file.

If a save function can be raised I can save to the document database

If a SavAs fucntion can be raised I can prompt the user to create a new version

 

Can the control have these two features added please?

Completed
Last Updated: 15 Apr 2019 10:57 by Dimitar
Release R2 2019
Add an event that is raised when the user makes any change to an image. 
Completed
Last Updated: 11 Apr 2019 08:17 by ADMIN
Release R2 2019 (LIB 2019.1.415)
Completed
Last Updated: 08 Apr 2019 16:26 by ADMIN
Release R2 2019 (LIB 2019.1.415)
Completed
Last Updated: 04 Apr 2019 13:43 by ADMIN
Release R2 2019 (LIB 2019.1.408)
Completed
Last Updated: 04 Apr 2019 13:29 by Dimitar
Release R2 2019 (LIB 2019.1.408)
The issue can be reproduced by setting the AssociatedControl property in the designer and later at run-time.
Completed
Last Updated: 01 Apr 2019 07:30 by ADMIN
At the moment the filter predicate is called only for the root nodes. A possible workaround is to recursively apply the filter logic for the child nodes as well.
Workaround:
private void Button1_Click(object sender, EventArgs e)
{
    this.radTreeView1.TreeViewElement.FilterPredicate = this.FilterNode;
    this.radTreeView1.Filter = "Custom";
}

private bool FilterNode(RadTreeNode node)
{
    Console.WriteLine(node.Text);
    if (node.Text.Contains("Child: 3"))
    {
        return true;
    }

    Stack<RadTreeNode> children = new Stack<RadTreeNode>();
    if (node.Nodes.Count > 0)
    {
        children.Push(node);
        while (children.Count > 0)
        {
            RadTreeNode current = children.Pop();
            foreach (RadTreeNode child in current.Nodes)
            {
                if (child.Text.Contains("Child: 3"))
                {
                    return true;
                }

                children.Push(child);
            }
        }
    }

    return false;
}
Completed
Last Updated: 15 Mar 2019 21:39 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 6
Category: UI Framework
Type: Feature Request
10
Description: iterate through all the Telerik controls in an application and set a theme to each RadControl at design-time. 

Resolition: Set the RadForm or RadRibbonForm ThemeName, Then right click on it and press "Apply current form's theme to controls." menu 
Completed
Last Updated: 13 Mar 2019 17:15 by ADMIN
Release 2018.3.1016
ADMIN
Created by: Stefan
Comments: 1
Category: PdfViewer
Type: Feature Request
16
Add bookmarks functionality
Completed
Last Updated: 13 Mar 2019 17:04 by ADMIN
Release 2018.3.911
ADMIN
Created by: Hristo
Comments: 0
Category: RichTextEditor
Type: Feature Request
1
This field retrieves a character through a code value specified in the field-argument. Such documents are common and are created when symbols (e.g. with font Windings through Insert -> Symbol dialog) are inserted in RTF documents in MS Word.
Completed
Last Updated: 21 Feb 2019 05:42 by ADMIN
This was working this way in 2017 then we changer it so all rows are affected. 

Bot modes should be supported. 

Completed
Last Updated: 19 Feb 2019 15:58 by ADMIN
Created by: Frank
Comments: 2
Category: UI for WinForms
Type: Feature Request
3
I need to tab though the form fields in RadPdfViewer instead of having to click in each one
Completed
Last Updated: 19 Feb 2019 14:07 by ADMIN
This will handle the scenario of having different image sets for different DPI.
Completed
Last Updated: 15 Feb 2019 16:46 by ADMIN

AutoCompleteSuggestHelper, Assembly: Telerik.WinControls.UI, Version=2019.1.117.40

 

Isnt the hilighted line (contains branch) very unoptimized.

https://rhale78.wordpress.com/2011/05/16/string-equality-and-performance-in-c/

Multiple ToLower string operation. Why not let the framework do the operation since you are always using ordinal?

optimized version: return item.Text.Contains(this.Filter, StringComparison.OrdinalIgnoreCase);


 

protected virtual bool DefaultFilter(RadListDataItem item)
    {
      switch (this.suggestMode)
      {
        case SuggestMode.StartWiths:
          return item.Text.StartsWith(this.Filter, this.StringComparison);
        case SuggestMode.Contains:
          if ((this.StringComparison & StringComparison.InvariantCultureIgnoreCase) == StringComparison.InvariantCultureIgnoreCase || (this.StringComparison & StringComparison.InvariantCultureIgnoreCase) == StringComparison.CurrentCultureIgnoreCase)
            return item.Text.ToLower().Contains(this.Filter.ToLower());
          return item.Text.Contains(this.Filter);
        default:
          return item.Text.StartsWith(this.Filter, this.StringComparison);
      }
    }

 

Completed
Last Updated: 05 Feb 2019 15:48 by ADMIN
Hide Item option in the context menu should not be present for those items. We should also consider a cancellable ItemHiding event. The custom control below handles this scenario:

public class CustomRadLayoutControl : RadLayoutControl
{
    public override string ThemeClassName
    {
        get
        {
            return typeof(RadLayoutControl).FullName;
        }
    }

    protected override void InitializeDropDownMenu()
    {
        FieldInfo hideMenuItemFi = typeof(RadLayoutControl).GetField("hideMenuItem", BindingFlags.Instance | BindingFlags.NonPublic);
        RadMenuItem hideMenuItem = hideMenuItemFi.GetValue(this) as RadMenuItem;

        if (hideMenuItem == null)
        {
            hideMenuItemFi.SetValue(this, new RadMenuItem(LayoutControlLocalizationProvider.CurrentProvider.GetLocalizedString(LayoutControlStringId.ContextMenuCustomize)));
            hideMenuItem = hideMenuItemFi.GetValue(this) as RadMenuItem;
        }

        hideMenuItem.Click += customizeItem_Click;

        RadDropDownMenu menu = typeof(RadLayoutControl).GetField("dropDownMenu", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as RadDropDownMenu;
        menu.Items.Add(hideMenuItem);
    }

    private void customizeItem_Click(object sender, EventArgs e)
    {
        if (this.AllowCustomize)
        {
            this.ShowCustomizeMenuDialog();
        }
    }

    private void ShowCustomizeMenuDialog()
    {
        if (this.CustomizeDialog.Visible)
        {
            return;
        }

        this.ShowCustomDragOverlay();
        this.CustomizeDialog.Owner = this.FindForm();
        ThemeResolutionService.ApplyThemeToControlTree(this.CustomizeDialog, this.ThemeName);

        if (this.CustomizeDialog.Location == Point.Empty)
        {
            this.CustomizeDialog.Location = GetInitialCustomizeDialogLocation();
        }

        this.CustomizeDialog.Show();
        this.CustomizeDialog.RightToLeft = this.RightToLeft;
    }

    private void ShowCustomDragOverlay()
    {
        FieldInfo dragOverlayFi = typeof(RadLayoutControl).GetField("dragOverlay", BindingFlags.Instance | BindingFlags.NonPublic);
        LayoutControlDraggableOverlay dragOverlay = dragOverlayFi.GetValue(this) as LayoutControlDraggableOverlay;

        if (dragOverlay == null)
        {
            dragOverlayFi.SetValue(this, new CustomLayoutControlDraggableOverlay(this));
            dragOverlay = dragOverlayFi.GetValue(this) as LayoutControlDraggableOverlay;
        }

        dragOverlay.ThemeName = this.ThemeName;
        dragOverlay.UpdatePreview();

        dragOverlay.Dock = DockStyle.Fill;
        ((RadLayoutControlControlCollection)this.Controls).AddInternal(dragOverlay);
        dragOverlay.Visible = true;
        dragOverlay.BringToFront();
        this.PerformLayout();
        this.Refresh();
    }

}

public class CustomLayoutControlDraggableOverlay : LayoutControlDraggableOverlay
{
    private RadMenuItem hideMenuItem;


    public CustomLayoutControlDraggableOverlay(RadLayoutControl owner) 
        : base(owner)
    {
        RadDropDownMenu contextMenu = typeof(LayoutControlDraggableOverlay).GetField("contextMenu", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this) as RadDropDownMenu;
        contextMenu.Items.Clear();

        this.hideMenuItem = new RadMenuItem(LayoutControlLocalizationProvider.CurrentProvider.GetLocalizedString(LayoutControlStringId.ContextMenuHideItem));
        this.hideMenuItem.Text = LayoutControlLocalizationProvider.CurrentProvider.GetLocalizedString(LayoutControlStringId.ContextMenuHideItem);
        this.hideMenuItem.Click += hideMenuItem_Click;
        contextMenu.Items.Add(hideMenuItem);
        contextMenu.DropDownOpening += ContextMenu_DropDownOpening;
    }

    private void ContextMenu_DropDownOpening(object sender, CancelEventArgs e)
    {
        if (this.SelectedItems.Count == 1 && this.SelectedItems[0].Name == "layoutControlItem4")
        {
            e.Cancel = true;
        }
    }

    private void hideMenuItem_Click(object sender, EventArgs e)
    {
        foreach (DraggableLayoutControlItem item in this.SelectedItems)
        {
            if (item.Name == "layoutControlItem4")
            {
                continue;
            }

            ((CustomRadLayoutControl)this.Owner).HideItem(item.AssociatedItem);
        }

        this.UpdatePreview();
    }
}
Completed
Last Updated: 05 Feb 2019 15:11 by ADMIN

Until released the text can be cleared this way:

GridSearchCellElement searchCell = this.radGridView1.TableElement.FindDescendant<GridSearchCellElement>();
if (searchCell != null)
{
    searchCell.SearchTextBox.Text = "";
}

Completed
Last Updated: 11 Jan 2019 10:58 by ADMIN
ADMIN
Created by: Hristo
Comments: 0
Category: GridView
Type: Feature Request
2

			
Completed
Last Updated: 11 Jan 2019 10:51 by ADMIN
ADMIN
Created by: Peter
Comments: 2
Category: GridView
Type: Feature Request
6
GridTimeColumn will display and allow user to edit with TimeEditor Time and Time-Span column types from the Database.
Completed
Last Updated: 23 Nov 2018 14:51 by Dimitar
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 0
Category: GanttView
Type: Feature Request
1
When you edit a link, e.g. change its end item, there is no appropriate event to handle this situation. The Links.CollectionChanged event is not fired. It would be nice to have a LinkChanged event which will be fired when a link is modified similar to the ItemChanged event for the tasks.

Workaround:
            foreach (GanttViewLinkDataItem link in this.radGanttView1.Links)
            {
                link.PropertyChanged += link_PropertyChanged;
            }

        private void link_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "EndItem")
            {
            }
            
        }
Completed
Last Updated: 19 Nov 2018 10:26 by ADMIN
ADMIN
Created by: Hristo
Comments: 1
Category: SplitContainer
Type: Feature Request
1
The end user should be able to specify what Cursor to be used while resizing a panel.

Currently this can be achieved using the custom control below:
public class MyRadSplitContainer : RadSplitContainer
{
    private bool isResizing;
 
    public override string ThemeClassName
    {
        get
        {
            return typeof(RadSplitContainer).FullName;
        }
    }
 
    protected override void OnMouseDown(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && this.ContentRectangle.Contains(e.Location))
        {
            SplitterElement splitter = GetSplitterElementAtPoint(e.Location);
            if (splitter != null && !splitter.Fixed)
            {
                this.isResizing = true;
            }
 
            base.OnMouseDown(e);
        }
    }
 
    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
 
        this.isResizing = false;
    }
 
    public override Cursor Cursor
    {
        get
        {
            Cursor cursor = base.Cursor;
            if (this.isResizing && cursor == Cursors.SizeWE)
            {
                cursor = Cursors.VSplit;
            }
            else if (this.isResizing && cursor == Cursors.SizeNS)
            {
                cursor = Cursors.HSplit;
            }
 
            return cursor;
        }
        set
        {
            if (value == Cursors.VSplit)
            {
                value = Cursors.SizeWE;
            }
            else if (value == Cursors.HSplit)
            {
                value = Cursors.SizeNS;
            }
 
            base.Cursor = value;
        }
    }
}