Completed
Last Updated: 15 Feb 2019 17:02 by ADMIN

Hello,

We have developed an ASP.NET application and a WinForms application that both uses Telerik RadScheduler. The applications share the same data.

We have set EnableExactTimeRendering = true to prevent appointments to falsely be displayed as collisions.

Our problem is that appointments with short durations (0-4 minutes) are totally invisible in the WinForms Scheduler. In the ASP.NET scheduler all appointments are visible. An appointment with no duration (0 minutes) is shown as 30min appointment in ASP.NET while 1-minute appointments are shown as a thin line which is ok as we use tooltips for all appointments.

How can we make all appointments visible in WinForms and still use EnableExactTimeRendering? Of course, the rendering will not be exact for small durations but that is better than not showing the appointments at all. We would like to set a minimum size for appointments.

Best regards,
Daniel Gidlöf

 

Completed
Last Updated: 15 Feb 2019 16:50 by ADMIN
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: 15 Feb 2019 16:41 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Sr.
Comments: 3
Category: MultiColumnCombo
Type: Bug Report
5
To reproduce:

Repository commonRepository = new Repository();

public Form1()
{
    InitializeComponent();

    InitializeDropDown();

    this.radMultiColumnComboBox1.DropDownMinSize = new Size(1100, 400);
    this.radMultiColumnComboBox1.EditorControl.ViewCellFormatting += EditorControl_ViewCellFormatting;
}

private void EditorControl_ViewCellFormatting(object sender, CellFormattingEventArgs e)
{
    if (e.Row is GridViewDataRowInfo && e.CellElement is GridRowHeaderCellElement)
    {
        e.CellElement.Text = e.RowIndex.ToString();
    }
}

public class Instrument
{ 
    public string Isin { get; set; }

    public string Description { get; set; }
    
    public string AlphaCode { get; set; }
    
    public string MicMarketplaceCode { get; set; }
    
    public string WorpMarketPlaceDescription { get; set; }
     
    public string InstrumentType { get; set; }
   
    public string DerivateIsin { get; set; }
    
    public int Order { get; set; }
}

public class Repository
{
    public BindingList<Instrument> GetInstruments()
    {
        Random rand = new Random();
        BindingList<Instrument> list = new BindingList<Instrument>();
        for (int i = 0; i < 80000; i++)
        {
            list.Add(new Instrument()
            {
                Isin = Guid.NewGuid().ToString(),
                Description = "Description" + i,
                AlphaCode = "Code" + i,
                MicMarketplaceCode = "MicCode" + i,
                WorpMarketPlaceDescription = "MPdescription" + i,
                InstrumentType = "Type" + i % 3,
                DerivateIsin = Guid.NewGuid().ToString(),
                Order = rand.Next(1, 100)
            });
        }
        return list;
    }
}

public void InitializeDropDown()
{
    var ui = TaskScheduler.FromCurrentSynchronizationContext();

    Task.Factory.StartNew(() =>
    {
        var result = commonRepository.GetInstruments();
        return result;
    }).ContinueWith(res =>
    {
        if (res.IsCompleted)
        {
            this.radMultiColumnComboBox1.DisplayMember = "Description";
            this.radMultiColumnComboBox1.ValueMember = "Isin";
            this.radMultiColumnComboBox1.AutoFilter = true;

            this.radMultiColumnComboBox1.DataSource = res.Result;

            CompositeFilterDescriptor compositeFilter = new CompositeFilterDescriptor();

            FilterDescriptor code = new FilterDescriptor("Isin", FilterOperator.Contains, "");
            FilterDescriptor description = new FilterDescriptor("Description", FilterOperator.Contains, "");
            FilterDescriptor alphaCode = new FilterDescriptor("AlphaCode", FilterOperator.Contains, "");
            FilterDescriptor micMarketplaceCode = new FilterDescriptor("MicMarketplaceCode", FilterOperator.Contains, "");
            FilterDescriptor worpMarketPlaceDescription = new FilterDescriptor("WorpMarketPlaceDescription", FilterOperator.Contains, "");
            FilterDescriptor instrumentType = new FilterDescriptor("InstrumentType", FilterOperator.Contains, "");
            FilterDescriptor derivateIsin = new FilterDescriptor("DerivateIsin", FilterOperator.Contains, "");

            compositeFilter.FilterDescriptors.Add(code);
            compositeFilter.FilterDescriptors.Add(description);
            compositeFilter.FilterDescriptors.Add(alphaCode);
            compositeFilter.FilterDescriptors.Add(micMarketplaceCode);
            compositeFilter.FilterDescriptors.Add(worpMarketPlaceDescription);
            compositeFilter.FilterDescriptors.Add(instrumentType);
            compositeFilter.FilterDescriptors.Add(derivateIsin);

            compositeFilter.LogicalOperator = FilterLogicalOperator.Or;

            this.radMultiColumnComboBox1.EditorControl.FilterDescriptors.Add(compositeFilter);

            this.radMultiColumnComboBox1.EditorControl.BestFitColumns();

            for (int i = 0; i < this.radMultiColumnComboBox1.EditorControl.Columns.Count; i++)
            {
                var column = this.radMultiColumnComboBox1.EditorControl.Columns[i];

                switch (column.Name)
                {
                    case "Isin":
                        column.HeaderText = "Header Isin";
                        column.Width = 120;
                        break;
                    case "Description":
                        column.HeaderText = "Header Description";
                        break;
                    case "AlphaCode":
                        column.HeaderText = "Header AlphaCode";
                        break;
                    case "MicMarketplaceCode":
                        column.HeaderText = "Header MicMarketplaceCode";
                        break;
                    case "WorpMarketPlaceDescription":
                        column.HeaderText = "Header WorpMarketPlaceDescription";
                        break;
                    case "InstrumentType":
                        column.HeaderText = "Header InstrumentType";
                        break;
                    case "DerivateIsin":
                        column.HeaderText = "Header DerivateIsin";
                        break;
                    case "Order":
                        column.IsVisible = false;
                        break;
                }
            }

            this.radMultiColumnComboBox1.SelectedItem = null;

            this.radMultiColumnComboBox1.Text = "Instrument";
            this.radMultiColumnComboBox1.ForeColor = Color.Gray;

            this.radMultiColumnComboBox1.MultiColumnComboBoxElement.DropDownWidth = 550;
        }
        else
        {
            RadMessageBox.Show(res.Exception.Message);
        }
    }, ui);
}

Workaround: use custom filtering instead of CompositeFilterDescriptor:

FilterDescriptor filter = new FilterDescriptor();
filter.PropertyName = this.radMultiColumnComboBox1.DisplayMember;
filter.Operator = FilterOperator.Contains;
this.radMultiColumnComboBox1.EditorControl.MasterTemplate.FilterDescriptors.Add(filter);
this.radMultiColumnComboBox1.EditorControl.EnableCustomFiltering = true;
this.radMultiColumnComboBox1.EditorControl.CustomFiltering += EditorControl_CustomFiltering;

 private void EditorControl_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e)
 {
     string searchText = this.radMultiColumnComboBox1.MultiColumnComboBoxElement.EditorElement.Text;
     if (searchText != string.Empty)
     {
         Instrument instrument = e.Row.DataBoundItem as Instrument;

         e.Handled = true;
         e.Visible = instrument.Isin.Contains(searchText) || instrument.Description.Contains(searchText) || instrument.AlphaCode.Contains(searchText) ||
                     instrument.MicMarketplaceCode.Contains(searchText) || instrument.WorpMarketPlaceDescription.Contains(searchText) ||
                     instrument.InstrumentType.Contains(searchText) || instrument.DerivateIsin.Contains(searchText);
     }
 }
Approved
Last Updated: 15 Feb 2019 12:03 by Jim
Changing the DataSource or scrolling are slow.

Create a grid with more than 20 columns and add 5K rows for example. Maximize the form and try to scroll with mouse wheel. You will notice that the scrolling performance is worse compared to the normal state of the form with less visible visual elements.

Workaround: this.radGridView1.EnableFastScrolling = true; and use the scrollbar's thumb

Second workaround: use paging:  https://docs.telerik.com/devtools/winforms/gridview/paging/overview Thus, you will display as many rows as possible to display on the screen per page. Instead of scrolling, you will navigate through pages.
Approved
Last Updated: 15 Feb 2019 09:11 by ADMIN
Created by: Michael Yereniuk
Comments: 0
Category: UI for WinForms
Type: Bug Report
1

To reproduce:

-double click an option in the MultiColumnCombobox editor and close the editor in the selected index changed event.

Completed
Last Updated: 14 Feb 2019 18:28 by Al

To reproduce:

Add a RadBindingNavigator to a form and change its name.

Bind it to something.

Workaround:

Leave the default name.

Completed
Last Updated: 14 Feb 2019 16:55 by ADMIN
Completed
Last Updated: 14 Feb 2019 16:49 by ADMIN
Created by: Graeme
Comments: 2
Category: Editors
Type: Bug Report
1

Hi,

 

We have an issue with the RadMaskedEditBox control using an f0 mask.

The issue we have is..

 

When entering a number i.e. 123456 followed by pressing the backspace key, results in the number showing as 123450

We would expect this to show as 12345 so assume this is either a bug or requires up to add additional configuration when using f0.

 

I have included an example which demonstrates this

 

Many thanks

Completed
Last Updated: 14 Feb 2019 16:46 by ADMIN

To reproduce:

See the attached video.

Completed
Last Updated: 14 Feb 2019 16:42 by ADMIN

When you setup a hierarchical RadVirtualGrid and set the UseScrollbarsInHierarchy property to false and use VirtualGridAutoSizeColumnsMode.Fill for the child template, you expect that the column's width is calculated according to the total width of the respective template. Hence, if you shrink or enlarge the grid, the columns will shrink/enlarge respectively. However, if you double click the resize cursor between the column headers you will notice that the best-fit action is performed over the column and its width is adjusted. However, the VirtualGridAutoSizeColumnsMode.Fill setting is not respected and you either can't see all the columns, or you obtain some empty space if the column doesn't need much space. 

Completed
Last Updated: 14 Feb 2019 16:37 by ADMIN

To reproduce:

Add page view with some pages.

Add a scrollable panel with some labels on the page.

The labels have different BackColor 

Workaround:

 radScrollablePanel1.PanelElement.Fill.BackColor = Color.FromArgb(245, 246, 247);
 //or
 radScrollablePanel1.BackColor = Color.FromArgb(239, 239, 239);

Completed
Last Updated: 14 Feb 2019 16:34 by ADMIN
If ribbon group is collapsed and we open its drop-down panel and click on its dialog launcher then nothing happens. Observed in clean Word-inspired project (Font and Paragraph groups have launchers).
Completed
Last Updated: 14 Feb 2019 16:13 by ADMIN
Created by: Mihajlo
Comments: 2
Category: RichTextEditor
Type: Bug Report
1

I added this line just before Application.Run(new MainForm()); in Word-inspired project:

RichTextBoxLocalizationProvider.CurrentProvider = RichTextBoxLocalizationProvider.FromFile(@"AllCapsRichTextBoxStrings.xml");

 

I took RichTextBoxStrings.xml from localization page of RichTextEditor. In the xml file I converted all the text between <value> tags to uppercase, and also replaced "OK" (value of "Confirm" data element) with "AYE". I expected all the OK's in all the forms within rich text editor to be replaced, but they all remained as "Ok" (note the lower case "k" here). Well, all except Page Layout > Columns form, which did display AYE, and also References > Insert citation. So, here are the issues that I found:

  • XML file in localizaiton page of RichTextEditor is missing entries for resources "Ok", "Insert", and "Apply".
  • "Ok" resource is used in most places, but "Confirm" resource (with value "OK") is used in AddNewBibliographicSourceDialog.cs and SectionColumns\SectionColumnsDialog.cs. This seems inconsistent.
  • Paper sizes are not localizable, which is actually fine by me for all but the last paper size, "Size14x10", but then what is the purpose of all RibbonUI_PaperSizeXxx resources in resource file?
  • Value of resource "Documents_InsertHyperlinkDialog_SelectionInDocument" is weird. Not sure this resource should even exist, as I could not make it appear in the InsertHyperlinkDialog. Looks like a dummy placeholder.
  • Fallback mechanism for missing resources is weird. If resource is missing the resource name is returned as resource value, which is the reason why Ok, Insert, and Apply are actually shown. Maybe this is intentional, if resource is missing it will be obvious (for unusual resource names). Alternative would be not to change the string at all, as it is already set to default english in .Designer.cs file anyway. So instead of "this.someTextBox.Text = LocalizationManager.GetString("Some_Resource");" it would be something like "this.someTextBox.Text = LocalizationManager.GetString("Some_Resource", this.someTextBox.Text);".

To create AllCapsRichTextBoxStrings.xml, make a copy of provided resource file, open it in Notepad++ and replace all <value>([^<]*)</value> with <value>\U\1\E</value> using regular expressions, and then replace all &AMP;, &LT; and &GT; with &amp;, &lt; and &gt;.

Approved
Last Updated: 14 Feb 2019 14:09 by ADMIN

The performance of the DayView when the control is bound to a large number of recurring appointments and it is grouped by resources needs to be improved.

Approved
Last Updated: 14 Feb 2019 12:41 by ADMIN

Steps:

1) Add a textbox to a form. Set tabindex set to 0.

2) Add a RadMaskedEditBox with tabindex set to 1, and add the code listed below.

        public Form1()
        {
            InitializeComponent();

            this.radMaskedEditBox1.MaskType = MaskType.Standard;
            this.radMaskedEditBox1.Mask = "000000";
            this.radMaskedEditBox1.PromptChar = '#';
            this.radMaskedEditBox1.SelectionStart = 0;
            this.radMaskedEditBox1.SelectionLength = 0;
            
            this.radMaskedEditBox1.Enter += radMaskedEditBox1_Enter;
            this.radMaskedEditBox1.Click += radMaskedEditBox1_Click;
            this.radMaskedEditBox1.MaskedEditBoxElement.TextBoxItem.Click += TextBoxItem_Click;
        }

        void radMaskedEditBox1_Enter(object sender, EventArgs e)
        {
            this.radMaskedEditBox1.SelectionStart = 0;
        }

        void TextBoxItem_Click(object sender, EventArgs e)
        {
            this.radMaskedEditBox1.SelectionStart = 0;
        }

        void radMaskedEditBox1_Click(object sender, EventArgs e)
        {
            
        }


3) Add breakpoints to all 3 RadMaskedEditBox events.

4) Run the app. Press tab key. (Enter event works as expected for the MaskedEditBox class).

5) Close and re-run app. Click the end of the MaskedEditBox. Click event is not invoked by the MaskedEditBox class as expected. 

 

Expected Result:

Since this control really only has 1 primary subcontrol (a fancy textbox). Event subscriptions to Click should subscribe to MaskedEditBoxElement.TextBoxItem.Click the += operator...

Should be fixed for MouseUp/Down and the all the other related key and mouse events.

 

Actual Result:

Subscriptions to Enter work on the MaskedEditBox class, but only subscriptions to MaskedEditBoxElement.TextBoxItem.Click work for Click events. This is highly confusing to the programmer whom is used to subscribing the standard Click event of a given control, and makes for unnecessarily complicated code and knowledge of the internal Element structure to make it work as expect like any other control.

 

Feature request:

It would be nice if there was also a "SelectionStart_MouseClick" property that works similar to SelectionStart but for Click events.

Also a EnableSelectionStart_MouseClick property with a default of false to maintain existing control behavior.

This allows the user to override the default cursor start position for Mouse Clicks. In the case above, the user cannot enter numbers unless they specifically click the start of the Mask; users find that confusing... 

The purpose of the above code is to be able to set the cursor start position "on-click", rather than only on Enter, which the existing SelectionStart property doesn't achieve.

Then we programmers could just set the properties and be done with it, and any subscriptions to the Click event would work as expected ->

public Form1() { InitializeComponent(); var customControl = new RadMaskedEditBoxV2() { MaskType = MaskType.Standard, Mask = "000000", PromptChar = '#', SelectionLength = 0, SelectionStart = 0, EnableSelectionStart_MouseClick = true, SelectionLength_MouseClick = 6, SelectionStart_MouseClick = 0 }; this.Controls.Add(customControl); }

 

 

 

public class RadMaskedEditBoxV2 : Telerik.WinControls.UI.RadMaskedEditBox { public RadMaskedEditBoxV2() : base() { this.EnableSelectionStart_MouseClick = false; this.MaskedEditBoxElement.TextBoxItem.Click += SelectionStartMouseClick_OnClick; } public new event EventHandler Click { add { base.MaskedEditBoxElement.TextBoxItem.Click += value; } remove { base.MaskedEditBoxElement.TextBoxItem.Click -= value; } } protected virtual void SelectionStartMouseClick_OnClick(object sender, EventArgs e) { if (EnableSelectionStart_MouseClick) { this.SelectionStart = SelectionStart_MouseClick; this.SelectionLength = SelectionLength_MouseClick; } } public int SelectionStart_MouseClick { get; set; } public int SelectionLength_MouseClick { get; set; } public bool EnableSelectionStart_MouseClick { get; set; } }

It would also allow the programmer to set the Enter and Click SelectionLengths separately.

 

Regards,

-Shawn.


Completed
Last Updated: 14 Feb 2019 12:37 by ADMIN
If we open paragraph properties dialog and then Tabstops properties dialog, and then close the second one the first one will also close automatically.
Approved
Last Updated: 14 Feb 2019 10:11 by ADMIN
Use attached to reproduce.
Completed
Last Updated: 13 Feb 2019 16:03 by Scott
To reproduce: please refer to the attached sample project and follow the steps from the attached gif file.

1. Run the project and type "hana" in the second filter cell. You will notice that after a few seconds the input is handled and the grid is filtered.

Workaround: use RadVirtualGrid instead. 
https://docs.telerik.com/devtools/winforms/virtualgrid/overview
https://docs.telerik.com/devtools/winforms/virtualgrid/filtering/filtering

Second workaround: https://docs.telerik.com/devtools/winforms/gridview/filtering/how-to/filter-on-enter
Completed
Last Updated: 13 Feb 2019 15:39 by ADMIN

Dears

Looks like after last Telerik update to 2019.1.117.40 lilter do digits/numbers is not working any more. When I'd like filter out on decimal columns (or even text column but with linked decimal/int values) I get no results, no rows.

With text columns all is ok.

 

BR

1 2 3 4 5 6