Unplanned
Last Updated: 28 Jan 2023 15:36 by Al

To reproduce:

1. Create a new .NET 7 project and add a RadForm to it with a single control (e.g. RadButton).

2. Open the designer and have a look at the form's Size.

3. Move the button and save the changes

4. Close the designer and open it again.

Expected result: the RadForm's Size is unchanged

Actual result: the RadForm gets smaller, its height is reduced.

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: 24 Jan 2023 14:31 by ADMIN
Currently, it is not possible to rotate the labels of the Polar/Radial axis.
Unplanned
Last Updated: 23 Jan 2023 12:09 by ADMIN
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: 23 Jan 2023 10:55 by ADMIN
In this case, we select a row by clicking on the row header cell. When we move to a different view (different month) and go back to the previous one with the selected row, we need to click twice on the header row to deselect it.
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?
Unplanned
Last Updated: 20 Jan 2023 12:02 by ADMIN

RadVirtualGrid.Selection.HasSelection (VirtualGridSelection.HasSelection) or is never false.

RadVirtualGrid grid = new RadVirtualGrid();
var hasSelection1 = grid.Selection.HasSelection; 
_grid.Selection.ClearSelection();
var hasSelection2 = grid.Selection.HasSelection;

After initializing the grid, and not loading anything, HasSelection is true, while nothing is selected.

After clearing the selection, HasSelection remains true.

This property is used in your own code as a pretest for some operations. (Like Copy or Cut).

Am I interpreting this property the wrong way?

Unplanned
Last Updated: 20 Jan 2023 09:42 by ADMIN

The following article shows how to attach the source code to your project:

https://docs.telerik.com/devtools/winforms/knowledge-base/attach-telerik-source-code-to-your-project 

When attaching the .NETCore projects (latest version R1 2023) to your application, the project can't be built.

Unplanned
Last Updated: 19 Jan 2023 12:29 by ADMIN
When a CUT operation is executed the control is not visually synchronized with the data cell values.
Unplanned
Last Updated: 19 Jan 2023 11:41 by ADMIN
Created by: Kim
Comments: 4
Category: Spreadsheet
Type: Feature Request
2
Add support for conditional formatting 
Unplanned
Last Updated: 19 Jan 2023 11:39 by ADMIN
Created by: Matthias
Comments: 2
Category: Spreadsheet
Type: Bug Report
3

Currently, it takes around 5 seconds to load the RadSpreadsheetRibbonBar.

Please run the project and compare the load time when clicking the two buttons in the main form.

Unplanned
Last Updated: 17 Jan 2023 12:51 by ADMIN

In this case, we have GridViewTextBoxColumn and GridViewComboBoxColumn after it. We want to trigger the edit on the second column at the moment it is navigated with the key arrow navigation. To do that BeginEdit() method is called. However, manually calling this method will trigger key events on the editor inside the GridViewComboBoxColumn which will bubble to the parent and move the current cell to the next column (skipped the GridViewComboBoxColumn )

This behavior could be workaround by delaying the execution of the BeginEdit() method.

public class CustomGridBehavior : BaseGridBehavior
{
    Timer timer = new Timer();        
    public override bool ProcessKey(KeyEventArgs keys)
    {
        var result = base.ProcessKey(keys);
        if((keys.KeyCode == Keys.Left || keys.KeyCode == Keys.Right) && this.GridControl.CurrentColumn is GridViewComboBoxColumn)
        {
            timer.Interval = 100;
            timer.Tick += Timer_Tick;
            timer.Start();                
        }
        return true;
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        timer.Stop();
        this.GridControl.BeginEdit();
    }
}

this.radGridView1.GridBehavior = new CustomGridBehavior();

 

Unplanned
Last Updated: 17 Jan 2023 11:29 by ADMIN
Created by: Martin
Comments: 1
Category: VirtualGrid
Type: Bug Report
0

Repro steps:

  • Create a RadVirtualGrid
  • Fill it with some records.
  • Make sure nothing is selected (RadVirtualGridElement.CurrentCell is null)
  • Press CTRL-C
  • A NullReferenceException is thrown (this because RadVirtualGridElement.CopyToClipboard accesses CurrentCell.ViewInfo while CurrentCell is null.)

Exception:

Message             : Object reference not set to an instance of an object.
Type                : System.NullReferenceException
Source              : Telerik.WinControls.GridView
Stack trace         : Telerik.WinControls.UI.RadVirtualGridElement.CopyToClipboard(Int32 startRow, Int32 startColumn, Int32 endRow, Int32 endColumn, VirtualGridViewInfo viewInfo, Boolean selectedOnly, Boolean cut)
                      Telerik.WinControls.UI.RadVirtualGridElement.CopySelection()
                      Turien.Windows.Forms.Telerik.VirtualGrid.VirtualGridViewPlus.RadVirtualGridElementPlus.CopySelection()
                      Turien.Windows.Forms.Telerik.VirtualGrid.VirtualGridViewPlus.VirtualGridInputBehaviorPlus.HandleUnhandledKeys(KeyEventArgs keys)
                      Telerik.WinControls.UI.VirtualGridInputBehavior.HandleKeyDown(KeyEventArgs args)
                      Telerik.WinControls.UI.RadVirtualGrid.OnKeyDown(KeyEventArgs e)
                      System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
                      System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
                      System.Windows.Forms.Control.WmKeyChar(Message& m)
                      System.Windows.Forms.Control.WndProc(Message& m)
                      System.Windows.Forms.ScrollableControl.WndProc(Message& m)
                      Telerik.WinControls.RadControl.WndProc(Message& m)
                      System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
                      System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
                      System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
                      System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
                      System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
                      System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
                      System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
                      System.Windows.Forms.Application.Run(Form mainForm)
                      Turien.Schade.PremiumCalculator.LookupTableManager.Program.Main()


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: 16 Jan 2023 11:40 by ADMIN

RadVirtualGridElement.Paste does not support pasting into new rows.

I want to override RadVirtualGridElement.Paste to allow to to paste into new rows. Except when I do so, the methods to retrieve information from the clipboard (GetHtmlData/GetTextData/GetCsvData ) are private.

So now I have one request, two solutions:

  • Make GetHtmlData/GetTextData/GetCsvData  protected so I can call them when I override Paste.
  • Or split up the Paste method into two sub-methods:
    • One sub-method to retrieve the information from the clipboard which will result in a list of list of strings (like: GetClipboardData())
    • The second sub-method to do the actually Paste the list of list of strings into the grid (like: Paste(List<List<string>> data)). Of course this sub-method must be virtual.

 

Unplanned
Last Updated: 16 Jan 2023 11:07 by ADMIN

When copying to from the RadVirtualGrid to the clipboard, the HTML format is not supported.

I was thinking about creating a feature request, but I really think this is a bug, because:

  1. It is not consistent with its little brother RadGridView, which does support HTML.
  2. HTML should be supported by Teleriks own documentation: https://docs.telerik.com/devtools/winforms/controls/virtualgrid/copy-paste-cut 

Please, implement the support for HTML.

Unplanned
Last Updated: 16 Jan 2023 10:45 by ADMIN

When I use the Copy method in the RadGridView, the content is copied to the clipboard in multiple formats. Each format can be cancelled. If a format is cancelled it is not even serialized into the DataObject. This way a programmer can replace the copy-routine for that format with his own.

When I do the same with RadVirtualGrid, and I only want to copy format CSV and I want to cancel the rest, nothing is copied to the clipboard. The funny thing is, inspecting the code, the data is always serialized to the DataObject BEFORE the event is fired to find out if that action is needed. This is a performance penalty.

So these two behaviors are inconsistent. It is also inconsistent the the Paste-operations of both grids.

Current code:

public void CopyToClipboard(
      int startRow,
      int startColumn,
      int endRow,
      int endColumn,
      VirtualGridViewInfo viewInfo,
      bool selectedOnly,
      bool cut)
    {
      DataObject dataObject = new DataObject();
      string data1 = this.ProcessContent(DataFormats.Text, startRow, startColumn, endRow, endColumn, viewInfo, selectedOnly, cut);
      dataObject.SetData(DataFormats.UnicodeText, false, (object) data1);
      VirtualGridClipboardEventArgs args1 = new VirtualGridClipboardEventArgs(false, DataFormats.UnicodeText, dataObject, this.CurrentCell.ViewInfo);
      this.OnCopying(args1);
      if (args1.Cancel)
        return;
      dataObject.SetData(DataFormats.Text, false, (object) data1);
      VirtualGridClipboardEventArgs args2 = new VirtualGridClipboardEventArgs(false, DataFormats.Text, dataObject, this.CurrentCell.ViewInfo);
      this.OnCopying(args2);
      if (args2.Cancel)
        return;
      string data2 = this.ProcessContent(DataFormats.CommaSeparatedValue, startRow, startColumn, endRow, endColumn, viewInfo, selectedOnly, cut);
      dataObject.SetData(DataFormats.CommaSeparatedValue, false, (object) data2);
      VirtualGridClipboardEventArgs args3 = new VirtualGridClipboardEventArgs(false, DataFormats.CommaSeparatedValue, dataObject, this.CurrentCell.ViewInfo);
      this.OnCopying(args3);
      if (args3.Cancel)
        return;
      Clipboard.SetDataObject((object) dataObject);
    }
Suggested code:


public void CopyToClipboard(
	int startRow,
	int startColumn,
	int endRow,
	int endColumn,
	VirtualGridViewInfo viewInfo,
	bool selectedOnly,
	bool cut)
{
	DataObject dataObject = new DataObject();

	VirtualGridClipboardEventArgs eventArgs = new VirtualGridClipboardEventArgs(false, DataFormats.UnicodeText, dataObject, CurrentCell.ViewInfo);
	OnCopying(eventArgs);
	bool useText = !eventArgs.Cancel;
	
	eventArgs = new VirtualGridClipboardEventArgs(false, DataFormats.UnicodeText, dataObject, CurrentCell.ViewInfo);
	OnCopying(eventArgs);
	bool useUnicodeText = !eventArgs.Cancel;

	if (useText || useUnicodeText)
	{
		string text = __instance.ProcessContent(DataFormats.Text, startRow, startColumn, endRow, endColumn, viewInfo, cut);
		if (useText)
			dataObject.SetData(DataFormats.Text, false, text);
		if (useUnicodeText)
			dataObject.SetData(DataFormats.UnicodeText, false, text);
	}
	eventArgs = new VirtualGridClipboardEventArgs(false, DataFormats.Text, dataObject, CurrentCell.ViewInfo);
	OnCopying(eventArgs);
	if (!eventArgs.Cancel)
	{
		string csv = __instance.ProcessContent(DataFormats.CommaSeparatedValue, startRow, startColumn, endRow, endColumn, viewInfo, selectedOnly, cut);
		dataObject.SetData(DataFormats.CommaSeparatedValue, false, csv);
	}
	
	if (dataObject.GetFormats().Length > 0)
		Clipboard.SetDataObject(dataObject);
}

Unplanned
Last Updated: 13 Jan 2023 14:11 by ADMIN

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: 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.
Unplanned
Last Updated: 11 Jan 2023 13:38 by ADMIN
While using a RadOverlayManager to indicate a long-lasting operation, calling the  RadOverlayManager.Close method puts the main form behind the other opened applications. A sample project is attached.
1 2 3 4 5 6