Completed
Last Updated: 24 Feb 2023 10:20 by ADMIN
Release R1 2023

The assembly is required for our RadMarkupEditor using the IE rendering engine. It allows you to specify HTML-like text formatting at design time in the Properties window of Visual studio:

 

Unplanned
Last Updated: 06 Mar 2023 09:55 by ADMIN
Open the designer of the attached form. Have a look at the locations for the cbSegmentacion and btnActivaDesactivaCentrradoLinea controls. Close and reopen the designer. You will see that the location is changed.
Completed
Last Updated: 31 Jan 2024 11:39 by ADMIN
Release 2024 Q1 (2024.1.130)
Created by: Martin
Comments: 13
Category: UI for WinForms
Type: Feature Request
1

We work with a RadGridView with 145000 rows and 4 columns. We use copy-paste to move data around from other apps and the application with build with Telerik.

When we copy a flat file (with tabs delimited fields) and we paste it to the RadGridView, the whole process is painfully slow. The function to retrieve the data from the clipboard takes minutes (maybe hours, I cancelled it). It tracked the cause down to the StringTokenizer class. The tokenizer splits the string up into separate fields. But after extracting a field it creates a new copy of that string (containing about 10MB of data) minus the field. I patched it (with HarmonyX) and now it takes only one second:

static class StringTokenizerPerformancePatch { static private readonly InstanceFieldAccessor<StringTokenizer, LinkedList<string>> _tokens = new InstanceFieldAccessor< StringTokenizer, LinkedList<string>>("tokens"); static private readonly InstanceFieldAccessor<StringTokenizer, string> _sourceString = new InstanceFieldAccessor<StringTokenizer, string>("sourceString"); static private readonly InstanceFieldAccessor< StringTokenizer, string> _delimiter = new InstanceFieldAccessor<StringTokenizer, string>("delimiter"); static private readonly InstanceFieldAccessor< StringTokenizer, IEnumerator<string>> _enumerator = new InstanceFieldAccessor<StringTokenizer, IEnumerator<string>>("enumerator"); [HarmonyPatch(typeof(StringTokenizer), "Tokenize")] staticclassPatch_StringTokenizer_Tokenize { static bool Prefix(StringTokenizer __instance) { var tokens = _tokens.GetValue(__instance); var sourceString = _sourceString.GetValue(__instance); var delimiter = _delimiter.GetValue(__instance); Tokenize(tokens, sourceString, delimiter); _enumerator.SetValue(__instance, tokens.GetEnumerator()); returnfalse; } static private void Tokenize(LinkedList<string> tokens, string text, string delimiter) { tokens.Clear(); if (string.IsNullOrEmpty(text)) return; int index = 0; while(true) { var index2 = text.IndexOf(delimiter, index, StringComparison.Ordinal); if (index2 < 0) { tokens.AddLast(text.Substring(index)); break; } string token = text.Substring(index, index2 - index); tokens.AddLast(token); index = index2 + delimiter.Length; } } } }

Please update your tokanizer to increase performance. While you are at it:
  • If delimiters are one character, why not use String.Split?
  • Why use a LinkedList?
Declined
Last Updated: 16 Feb 2024 22:25 by ADMIN

I can't provide a project or even code snippets that would make sense out of context because the code base is too complex for an easy replication to be setup.

We are trying various things like calling Refresh, Update.

 

Hoping this is something you've encountered before and have some suggestions.

Unplanned
Last Updated: 28 Nov 2022 07:50 by Shaindy
 The styles of a hyperlink (color, font properties) are not exported correctly to HTML
Declined
Last Updated: 16 Feb 2024 12:35 by ADMIN

1. Select the ColorBox's ellipses to open the Color Dialog

2. Select the Web tab

3. Select Any colour in this Page

4. Select Transparent

Colour will update

5. Select the Professional tab

6. Select any colour

Colour won't update

7. Select any colour

Colour won't update

8. Select OK on Dialog

Colour will be transparent

Values will be same as selected in step 7

Unplanned
Last Updated: 29 Nov 2022 05:40 by ADMIN
Created by: Dev
Comments: 2
Category: UI for WinForms
Type: Feature Request
0

Currently, RadGridView offers GridViewImageColumn. However, it would be good to offer support for SVG images out of the box.  

One possible approach is to introduce a new property for the GridViewImageColumn - ImageDrawType = ImageDrawType.Svg that controls what kind of images this column will store.

Second approach is to introduce a new GridViewSvgImageColumn.

Declined
Last Updated: 15 Sep 2023 10:55 by ADMIN
Created by: kieran
Comments: 1
Category: UI for WinForms
Type: Feature Request
2

Hi guys,

              It would be great to be able to set the day start/finish times in your Scheduler.

Your Scheduler control is fantastic, but I am building a Scheduler for a company that operates over 24hrs and the shift hours are

6am - 6pm

6pm - 6am

both shifts are classed as being the same day even though the nightshift crosses over to the next day.

 

I would like to be able to adjust the 24hr period that defines a day so that in month view the appointment will not carry over to the next shift.

and in day view, the schedule will start at 6am and go through to 6am.

If you could implement this, your scheduler control would be even more powerful and awesome.

Thanks!

Unplanned
Last Updated: 16 Feb 2024 12:27 by Martin
Created by: Martin
Comments: 4
Category: UI for WinForms
Type: Feature Request
0

I would like to have a generic validation-mechanism, implemented in all controls. Hear me out:

A class ValidationInformation for containing all sort of validation information for a certain field, property, cell, etc. which has properties likes:

  • Type DataType
  • object MinValue
  • object MaxValue
  • int? MinLength
  • int? MaxLength
  • bool IsRequired
  • RegEx Mask
  • etc.

It also has a virtual method like bool Validate(object entity, object value, out string validationError).

A base class ValidationInformationProvider for retrieving validation information from various sources. It has some abstract methods for retrieval, storing/caching information per cell/field/property.

This base class has the following subclasses:

  • ValidationInformationProviderFromDataTable
  • ValidationInformationProviderFromAnnotations
  • ValidationInformationProviderFromXXX

Each provider is responsible for reading validation information from the source (DataTable, annotations on a property, etc.) and fill a ValidationInformation object.

Now the fun begins...

Each Telerik class, like RadGridView and/or subcomponents should get a method or event to retrieve ValidationInformation. When the event is not handled or the method returns null, the default behavior kicks in.

When ValidationInformation is provided, default behavior is overridden. Properties of editors van be set with values from ValidationInformation (like Minimum and Maximum of a GridViewDecimalColumnPlus or RadSpinEditorElement). At the end if editing the method ValidationInformation.Validate is called to validate the new value. The validation error can be used for popups, or tooltips, or an exception. 

This way a user does not have to think where to set which property of any Telerik control for any validation. This way a RadPropertyGrid and RadGridView can work the same way when it comes to data validation, regardless of all editors which work in the background. 

Completed
Last Updated: 01 Nov 2022 13:06 by ADMIN
Release R3 2022 SP2
Created by: Martin
Comments: 1
Category: UI for WinForms
Type: Feature Request
0

This is about the following method:

        public void SetError(GridViewCellCancelEventArgs e, Exception exception)
        {
            GridViewDataErrorEventArgs args = new GridViewDataErrorEventArgs(exception, 0, 0, GridViewDataErrorContexts.Commit);
            if (e != null)
            {
                args = new GridViewDataErrorEventArgs(exception, e.ColumnIndex, e.RowIndex, GridViewDataErrorContexts.Commit);
            }
            this.EventDispatcher.RaiseEvent<GridViewDataErrorEventArgs>(EventDispatcher.DataError, this, args);

            if (args.ThrowException)
            {
                throw args.Exception;
            }

            if (args.Cancel)
            {
                //TODO: cancel row edit 
            }
        }

Right now, the method GridViewTemplate.SetError accepts a parameter of type GridViewCellCancelEventArgs, which in itself is weird, because event args should only be used inside events and OnXXX-methods. But since SetError fires an event, one could argue that this method is like a OnXXX-method.

But inside it becomes more weird, it translates GridViewCellCancelEventArgs into GridViewDataErrorEventArgs. And I must admit, the last DataError-args feel a lot more logical that CellCancel-args when firing setting an error. Furthermore, if I create an override of class GridViewCellCancelEventArgs to contain more data about an error, this information never reaches the event handlers.

So why this translation? Or better: Why this parameter?

My suggestion would be to make a new overload:


public void SetError(GridViewDataErrorEventArgs e)
{
    if (e == null)
        throw new ArgumentNullException(nameof(e));

        this.EventDispatcher.RaiseEvent<GridViewDataErrorEventArgs>(EventDispatcher.DataError, this, args);

        if (args.ThrowException)
                throw args.Exception;

        if (args.Cancel)
        {
                // TODO: I really do not know what telerik wanted to do here, so I live this up to Telerik.
        }
}
Furthermore you could consider markering the other SetError-methods as obsolete.
Completed
Last Updated: 05 Apr 2023 10:02 by ADMIN
Release R1 2023 SP1

This is about this method:

        public void SetError(GridViewCellCancelEventArgs e, Exception exception)
        {
            GridViewDataErrorEventArgs args = new GridViewDataErrorEventArgs(exception, 0, 0, GridViewDataErrorContexts.Commit);
            if (e != null)
            {
                args = new GridViewDataErrorEventArgs(exception, e.ColumnIndex, e.RowIndex, GridViewDataErrorContexts.Commit);
            }
            this.EventDispatcher.RaiseEvent<GridViewDataErrorEventArgs>(EventDispatcher.DataError, this, args);

            if (args.ThrowException)
            {
                throw args.Exception;
            }

            if (args.Cancel)
            {
                //TODO: cancel row edit 
            }
        }

The method GridViewTemplate.SetError accepts a parameter of type GridViewCellCancelEventArgs (named e), but uses the information to create a new object of type GridViewDataErrorEventArgs (named args) and uses information from e to fill args.

The method then fires an event with args. Args also has a property Cancel which can be set in the event handlers. But nothing is done with that property.

Parameter e also has a property Cancel which is never be filled. So it could be useful, at the end of SetError, to set e.Cancel with args.Cancel. This way the caller can use the Cancel information from the events.

This request is also related to my next request. 

PS: Why is GridViewCellCancelEventArgs  called this way? It implies it has arguments for an event, but it is not used for an event, am I right?

Completed
Last Updated: 01 Nov 2022 13:07 by ADMIN
Release R3 2022 SP2

The method GridViewTemplate.SetError creates in most situations an GridViewDataErrorEventArgs object twice.

Current code:

GridViewDataErrorEventArgs args = new GridViewDataErrorEventArgs(exception, 0, 0, GridViewDataErrorContexts.Commit);
if (e != null)
{
    args = new GridViewDataErrorEventArgs(exception, e.ColumnIndex, e.RowIndex, GridViewDataErrorContexts.Commit);
}

In assume in most cases e will not be null, so in must cases the first args will be removed. This has a small negative impact on memory and performace.

Suggestion:

GridViewDataErrorEventArgs args = e == null 
    ? new GridViewDataErrorEventArgs(exception, 0, 0, GridViewDataErrorContexts.Commit)
    : new GridViewDataErrorEventArgs(exception, e.ColumnIndex, e.RowIndex, GridViewDataErrorContexts.Commit);

Completed
Last Updated: 02 Feb 2023 09:34 by ADMIN
Release R1 2023
Created by: Wenyu
Comments: 1
Category: UI for WinForms
Type: Bug Report
0

After installing R3 2022, the QuickStart example can't be run:

 

 
Completed
Last Updated: 12 Oct 2022 12:36 by ADMIN
Release R3 2022 SP2
Created by: Martin
Comments: 7
Category: UI for WinForms
Type: Bug Report
0

Repro-steps

  1. Create a Form
  2. Add a RadGridView control
  3. Add two Text columns
  4. Run the form
  5. Add a new row to the RadGridView with values "a" and "b"
  6. Add a another row to the RadGridView with values "c" and "d"
  7. Select the first row and copy the row values
  8. Select the first cell of the second row and paste the values

Expected behavior

  • The values "a" and "b" are in the second row

Observed behavior

  • The values "ab" and "d" are in the second row

 

Completed
Last Updated: 12 Oct 2022 06:42 by ADMIN
Release R3 2022 SP2

Repro-steps

  1. Create a Form
  2. Add a RadGridView control
  3. Add two Text columns
  4. Run the form
  5. Add a new row to the RadGridView with values "a" and "b"
  6. In Excel fill a row with two cells with values "c" and "d"
  7. Select those cells and copy them to the clipboard
  8. In the RadGridView select the first cell of the row
  9. Paste the data

Expected behavior

  • The values "c" and "d" are in the row

Observed behavior

  • The values "System.IO.MemoryStream" and "b" are in the row

Extra info

If the first column is of another type (like GridViewDecimalColumn) a DataError occurs (because "System.IO.MemoryStream" cannot be parces to a decimal).

 

Unplanned
Last Updated: 29 Sep 2022 13:03 by ADMIN
Created by: erwin
Comments: 3
Category: UI for WinForms
Type: Bug Report
1

To replicate the missing button when the application is run on my main monitor with 150% DPI scaling:



If the RadControl.EnableRadAutoScale property is set to false in the Program.cs file, the button is placed as expected:



When I replace the form to inherit from RadForm, not the MS Form, the button is clipped:

Completed
Last Updated: 11 Oct 2022 12:23 by ADMIN
Release R3 2022 SP2
Created by: Sandor
Comments: 2
Category: UI for WinForms
Type: Bug Report
0
The latest public release Telerik_UI_For_WinForms_2022_3_921_source.zip contains all of the git repository its 1001 MB, while the lastest was 224 MB.
Completed
Last Updated: 02 Feb 2023 09:36 by ADMIN
Release R1 2023

To reproduce the issue, just drag a RadToggleSwitch to the form. Then, at run time call the method:

radToggleSwitch1.SetToggleState(newValue: false, animate: false);

You will notice that the colors are changed but the thumb is not moved: 

Workaround:

            this.radToggleSwitch1.AllowAnimation = false;
            this.radToggleSwitch1.Toggle();

Completed
Last Updated: 23 Sep 2022 13:07 by ADMIN
Release R3 2022

ThemeResolutionService.ApplicationThemeName = "Office2019Dark"; this.radDropDownList1.EnableAlternatingItemColor = true;

Completed
Last Updated: 27 Mar 2023 06:39 by ADMIN
Release R1 2023 SP1

Hi,

I am using CalHelper to convert recurrence rule to and from string.

It looks like when I convert rule to string and then parse it back to recurrence, some of the properties get dropped.

Please see below from my VS editor highlighting this:

 

Am I doing something wrong, or is this a bug?

 

Thanks

Anu