Pending Review
Last Updated: 04 Feb 2023 11:17 by Elliot
Created by: Elliot
Comments: 0
Category: UI for WinForms
Type: Feature Request
0

Background: With many people having moved to working remotely, collaboration is a much larger part of any enterprise applications. As such, it would be highly beneficial to add real time collaboration capabilities to editor controls, more specifically the RadRichTextEditor control. It would work similarly to how MS Word works when more than one user is editing a document at the same time.

Scenario: Assume you have and WinForms application where there is a form that contains a RadRichTextEditor. The content for this control is populated from a centralized database. This content is editable by users of the application. Lets say that you have two users (User A and User B) editing this content at the same time. Currently, User A cannot see what User B is doing in real-time, and vice-versa. Each time one of the users saves the content, it will overwrite any changes made by the other user.

Desired outcome: If the users in the above scenario are using MS Word, each user would see that someone else is currently editing the document and the other user's changes would be displayed in real-time. This same outcome should be made more readily available with the Telerik editors, primarily the RadRichTextEditor, so that when two users are editing the same content, they would see each others' changes in real-time.

I know this is possible using SignalR and a bit of code, but I think it would be beneficial for the RadRichTextEditor to have better "out of the box" support for this feature.

I am aware of a web-based control that has this feature. Specifically, the CKEditor (https://ckeditor.com/) control has the features I am requesting. However, I am looking at WinForms as opposed to web.

Completed
Last Updated: 02 Feb 2023 09:38 by ADMIN
Release R1 2023
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: 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: 02 Feb 2023 09:28 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:

 

In Development
Last Updated: 02 Feb 2023 09:23 by ADMIN
Scheduled for R1 2023 SP1
Created by: Martin
Comments: 5
Category: UI for WinForms
Type: Bug Report
1

The Cut operations of the RadVirtualGrid does not work.

When the SelectionMode is set to FullRowSelect, MultiSelect = true, and multiple rows are selected, the loop goes something like this:

// Pseudo code:
for(int rowIndex = firstRow; rowIndex <= lastRow; rowIndex++)
{
    AddRowToClipboardData(rowIndex)
    UserDeletedRow(rowIndex);
}
What is wrong here?
  1. Lets say 10 rows are selected, only the even rows get copied. First row 0 is copied and deleted. When row 0 is deleted, all rows move a position down. So when copying row 1, it is actually row 2 that is copyied.
  2. When cutting all rows, in my case an exception is thrown, because a rowIndex larger than the number of rows is referred to.
  3. When cutting to multiple clipboard formats, the second format will not contain the original selected data, because it has already been deleted.

My suggestion:

  1. First copy all the data and formats to the clipboard.
  2. Then delete the selected rows.

 

Unplanned
Last Updated: 01 Feb 2023 09:37 by ADMIN
ADMIN
Created by: Dess | Tech Support Engineer, Principal
Comments: 5
Category: UI for WinForms
Type: Feature Request
14

			
In Development
Last Updated: 27 Jan 2023 12:32 by ADMIN
Scheduled for 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?

Unplanned
Last Updated: 26 Jan 2023 17:04 by ADMIN
Created by: Dess
Comments: 1
Category: UI for WinForms
Type: Feature Request
0

The Control Panel offers a way to reset your password by navigating you to https://www.telerik.com/registration-login/forgotten-password?utm_source=tcp 

Unplanned
Last Updated: 23 Jan 2023 10:08 by ADMIN
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: 19 Jan 2023 16:23 by ADMIN
Created by: kultman
Comments: 1
Category: UI for WinForms
Type: Bug Report
0
The extension (which also keeps load times high) is prompting me about an expired subscription. We had a 2 seat and a 1 seat subscription. We now only need 2 seats and let the 1 seat expire. But I'm using the 2 seat active subscription. So stop bugging me about the expired 1 seat please :)
Unplanned
Last Updated: 17 Jan 2023 09:37 by ADMIN

RadVirtualGrid is created to support a million records or more. Still it contains some "heavy" operations like CopySelection/CutSelection/Paste which can take a long time.

I would like to intercept these methods so I can show a "Please wait"-window during the operation. Furthermore I have the need to set a flag to true when such a operation is executing. 

Unplanned
Last Updated: 11 Jan 2023 14:33 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.
Need More Info
Last Updated: 30 Nov 2022 05:59 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.

Under Review
Last Updated: 29 Nov 2022 09:52 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.

Unplanned
Last Updated: 28 Nov 2022 07:50 by Shaindy
 The styles of a hyperlink (color, font properties) are not exported correctly to HTML
Completed
Last Updated: 01 Nov 2022 13:52 by ADMIN
Release R3 2022 SP2
Created by: Dess
Comments: 0
Category: UI for WinForms
Type: Feature Request
0

The ChartLegendElement displays the legend items in a StackLayoutElement which can be either vertical or horizontal.

        public RadForm1()
        {
            InitializeComponent();

            Random rand = new Random();
            List<LineSeries> list = new List<LineSeries>();
            for (var index = 1; index <= 15; index++)
            {
                LineSeries ls = new LineSeries();
                ls.LegendTitle = "Series " + index;
                list.Add(ls);
            }

            for (int index = 1; index <= 100; index++)
            {
                foreach (LineSeries s in list)
                    s.DataPoints.Add(new CategoricalDataPoint(index, rand.Next(0, rand.Next(5, 20))));
            }
            this.radChartView1.Series.AddRange(list.ToArray());
            this.radChartView1.ShowLegend = true;
            this.radChartView1.ChartElement.LegendPosition = LegendPosition.Bottom;
            this.radChartView1.ChartElement.LegendElement.StackElement.Orientation = Orientation.Vertical;
        }

Horizontal:

Vertical:

It would be good to provide an option for wrapping the legend items:

chartview-wrap-legend-items002

Workaround: use an appropriate container for the legend items to wrap the legend item and use the space more efficiently

https://docs.telerik.com/devtools/winforms/knowledge-base/chartview-wrap-legend-items 

 

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: 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.
1 2 3 4 5 6