When the control is populated with hierarchy data, the current arrow icon and the expander icon overlap each other. This is observed when you click on a row.
As a workaround, we can increase the size of the indent column to leave enough space for both icons.
this.radVirtualGrid1.TableElement.IndentColumnWidth = 40;
Then we can move the current row arrow icon to the left (or right, depending on your requirement) in the CellFormatting event handler of the control.
private void radVirtualGrid1_CellFormatting(object sender, VirtualGridCellElementEventArgs e)
{
if (e.CellElement is VirtualGridIndentCellElement)
{
var indentCell = e.CellElement as VirtualGridIndentCellElement;
indentCell.ImageLayout = ImageLayout.None;
indentCell.ImageAlignment = ContentAlignment.MiddleLeft;
}
}
This behavior can be observed in the Office2010 theme. In the following image, the button's width in RadCalculatorDropDown and RadSpinEditor is less by 1 px compared to the buttons in the other editor controls.
Currently, this behavior is available for RadGridView and the parent row becomes current/selected after expanding. Please refer to the attached gif file for RadGridView and the missing functionality for RadVirtualGrid.
Hello,
RadPropertyGrid does not properly intersect properties when what is set as SelectedObjects implements the ICustomTypeDescriptor interface. However, the .Net Framework PropertyGrid does not have this problem.
To reproduce the problem, use the attached project.
To reproduce RadGridView (or other RadControl) flooding WM_TIMER messages do the following
1. Create a simple WinForms project with a RadGridView in it.
2. Open spy++ tool (it comes with Visual Studio).
3. Attach the process that is running the WinForms and choose to display its messages.
4. You should now see a lot of WM_TIMER messages as shown in the gif file.
To reproduce:
1.Create new RadTreeView
2.Create new ImageList and populate
3.Assign ImageList to RadTreeView
4.Open Property Builder
5.Assign Image to a Node, Apply, Close
6.Re-Open, change Node to a different Image, the previous image remains
Expected: the new image is successfully updated.
Actual: the old image remains:
To reproduce:
public RadForm1()
{
InitializeComponent();
PopulateGrid();
}
private void radButton1_Click(object sender, EventArgs e)
{
GridViewSpreadExport spreadExporter = new GridViewSpreadExport(this.radGridView1);
SpreadExpo
rtRenderer exportRenderer = new SpreadExportRenderer();
spreadExporter.ExportHierarchy = true;
spreadExporter.ExportVisualSettings = true;
spreadExporter.ChildViewExportMode = Telerik.WinControls.UI.Export.ChildViewExportMode.ExportAllViews;
string fileName = @"..\..\exportedFile" + DateTime.Now.ToLongTimeString().Replace(":", "_") + ".xlsx";
spreadExporter.RunExport(fileName, exportRenderer);
Process.Start(fileName);
}
public void PopulateGrid()
{
List<GridResults.ChildCollectionFirst> firstCollection = new List<GridResults.ChildCollectionFirst>
{
new GridResults.ChildCollectionFirst
{
Test1 = "First Child"
}
}.ToList();
List<GridResults.ChildCollectionSecond> secondCollection = new List<GridResults.ChildCollectionSecond>
{
new GridResults.ChildCollectionSecond
{
Test2 = "Second Child"
}
}.ToList();
List<GridResults.ChildCollectionThird> thirdCollection = new List<GridResults.ChildCollectionThird>
{
new GridResults.ChildCollectionThird
{
Test3 = "Third Child"
}
}.ToList();
List<GridResults.ChildCollectionFourth> fourthCollection = new List<GridResults.ChildCollectionFourth>
{
new GridResults.ChildCollectionFourth
{
Test4 = "Fourth Child"
}
}.ToList();
var resultsList = new List<GridResults>
{
new GridResults
{
Id = "First Parent",
Value = "Test Value 1",
ChildCollection1 = new List<GridResults.ChildCollectionFirst>(),
ChildCollection2 = new List<GridResults.ChildCollectionSecond>(),
ChildCollection3 = new List<GridResults.ChildCollectionThird>(),
ChildCollection4 = new List<GridResults.ChildCollectionFourth>()
},
new GridResults
{
Id = "Second Parent",
Value = "Test Value 2",
ChildCollection1 = firstCollection,
ChildCollection2 = secondCollection,
ChildCollection3 = thirdCollection,
ChildCollection4 = fourthCollection
},
new GridResults
{
Id = "Third Parent",
Value = "Test Value 3",
ChildCollection1 = new List<GridResults.ChildCollectionFirst>(),
ChildCollection2 = new List<GridResults.ChildCollectionSecond>(),
ChildCollection3 = new List<GridResults.ChildCollectionThird>(),
ChildCollection4 = new List<GridResults.ChildCollectionFourth>()
},
new GridResults
{
Id = "Fourth Parent",
Value = "Test Value 4",
ChildCollection1 = new List<GridResults.ChildCollectionFirst>(),
ChildCollection2 = new List<GridResults.ChildCollectionSecond>(),
ChildCollection3 = new List<GridResults.ChildCollectionThird>(),
ChildCollection4 = new List<GridResults.ChildCollectionFourth>()
},
new GridResults
{
Id = "Fifth Parent",
Value = "Test Value 5",
ChildCollection1 = new List<GridResults.ChildCollectionFirst>(),
ChildCollection2 = new List<GridResults.ChildCollectionSecond>(),
ChildCollection3 = new List<GridResults.ChildCollectionThird>(),
ChildCollection4 = new List<GridResults.ChildCollectionFourth>()
},
new GridResults
{
Id = "Sixth Parent",
Value = "Test Value 6",
ChildCollection1 = new List<GridResults.ChildCollectionFirst>(),
ChildCollection2 = new List<GridResults.ChildCollectionSecond>(),
ChildCollection3 = new List<GridResults.ChildCollectionThird>(),
ChildCollection4 = new List<GridResults.ChildCollectionFourth>()
}
};
// radGridView1.BeginUpdate();
radGridView1.DataSource = resultsList;
// radGridView1.EndUpdate();
foreach (GridViewTemplate t in this.radGridView1.Templates)
{
t.AutoSizeColumnsMode= GridViewAutoSizeColumnsMode.Fill;
}
}
public class GridResults
{
[DisplayName("ID")]
public string Id { get; set; }
[DisplayName("Value")]
public string Value { get; set; }
[DisplayName("Child Collection 1")]
public List<ChildCollectionFirst> ChildCollection1 { get; set; }
[DisplayName("Child Collection 2")]
public List<ChildCollectionSecond> ChildCollection2 { get; set; }
[DisplayName("Child Collection 3")]
public List<ChildCollectionThird> ChildCollection3 { get; set; }
[DisplayName("Child Collection 4")]
public List<ChildCollectionFourth> ChildCollection4 { get; set; }
[DisplayName("Child Collection 1")]
public class ChildCollectionFirst
{
[DisplayName("Test Header")]
public string Test1 { get; set; }
}
[DisplayName("Child Collection 2")]
public class ChildCollectionSecond
{
[DisplayName("Test Header 2")]
public string Test2 { get; set; }
}
[DisplayName("Child Collection 3")]
public class ChildCollectionThird
{
[DisplayName("Test Header 3")]
public string Test3 { get; set; }
}
[DisplayName("Child Collection 4")]
public class ChildCollectionFourth
{
[DisplayName("Test Header 4")]
public string Test4 { get; set; }
}
}
The observed result with duplicated rows is demonstrated here:
public RadForm1()
{
InitializeComponent();
this.radTextBox1.ShowEmbeddedLabel = true;
this.radTextBox1.EmbeddedLabelText = "Enter name:";
}
private void RadForm1_Shown(object sender, EventArgs e)
{
this.radTextBox1.Focus();
}
Workaround: add RadTreeNodes at run time.
Currently, adding a standard MS Form also shows the .vb extension. However, adding a RadForm shows only the name which may lead to incorrect name of the form as it is demonstrated in the attached gif file:
Please refer to the attached sample video.
StackTrace:
Message: Object reference not set to an instance of an object. Telerik.WinControls.UI.RadGridViewDragDropService.GetDragImageHint(ContentAlignment textAlignment, Bitmap hintImage, RectangleF textRectangle, Int32 hintImageWidth) Telerik.WinControls.UI.ColumnChooserItem.GetDragHintCore() Telerik.WinControls.RadItem.Telerik.WinControls.ISupportDrag.GetDragHint() Telerik.WinControls.RadDragDropService.PrepareContext():80 Telerik.WinControls.RadDragDropService.HandleMouseMove(Point mousePos):40 Telerik.WinControls.UI.RadGridViewDragDropService.HandleMouseMove(Point mousePosition):13 Telerik.WinControls.RadDragDropService.Telerik.WinControls.IMessageListener.PreviewMessage(Message& msg):150 Telerik.WinControls.RadMessageFilter.NotifyGetMessageEvent(Message& msg):41 Telerik.WinControls.RadMessageFilter.GetMessageHookProc(Int32 code, IntPtr wParam, IntPtr lParam):36