Hi,
I have a question regarding RadGridView. When I edit a cell in GridView and then click on a button (outside of gridview) immediately (i.e I don't click on another cell to exit edit mode), the Gridview is still edit mode. Please refer to the short video named "Without Using EndEdit()" to easily understand my point here.
In order to exit the edit mode, I try the following code:
Private Sub CustomGridView_LostFocus(sender As Object, e As EventArgs) Handles Me.LostFocus Me.EndEdit() End Sub
With this code, the gridview does exit the edit mode when I click on another button. But there is a problem with this method is that afterwards, I cannot edit the cell anymore. Please refer to the short video named "Using EndEdit()" to better understand the problem.
So my question here is, is there any way that I can exit edit mode when clicking on another button right after editing a cell?
Thank you for your help.
Best regards,
Tran
To reproduce, rebind the grid to a data table on button click and show grid's search row.
public RadForm1()
{
InitializeComponent();
this.radGridView1.AllowSearchRow = true;
}
private void RadButton1_Click()
{
DataTable dt = this.GetData();
this.radGridView1.DataSource = dt;
}
private DataTable GetData()
{
DataTable data = new DataTable();
for (int i = 0; i < 5; i++)
{
data.Columns.Add("Column " + i, typeof(int));
data.Columns.Add("Column " + i + 1, typeof(string));
data.Columns.Add("Column " + i + 2, typeof(string));
}
for (int k = 0; k < 5000; k++)
{
object[] parameters = new object[15];
for (int i = 0; i < 15; i += 3)
{
parameters[i] = k;
parameters[i + 1] = "Text " + i;
parameters[i + 2] = "Text " + i + 1;
}
data.Rows.Add(parameters);
}
return data;
}
There are situations where SelectedRows won't return the number of rows preselected when using Begin/EndUpdate even though it seems like there's a row selected in the UI. By preselected I mean the row that looks selected after the rows has been added. This bug has caused some problems for us because the user tried some action on a row they thought was preselected and it would fail.
One situation I found where this bug can be reproducted is by using SortOrder in combination of Begin/EndUpdate. There are probably more situations but I hope this one will let you find the underlying bug.
The attached project contains a simple form with a RadGridView which will contain a list of persons. The list is populated by this method:
public void PopulateGridView(List<Person> persons)
{
PersonGridView.BeginUpdate();
PersonGridView.DataSource = persons;
PersonGridView.EndUpdate();
PersonGridView.Columns[nameof(Person.LastName)].SortOrder = RadSortOrder.Ascending;
}
There are two buttons: "Step one" and "Step two". The first will mimick a situation where the user search a database for persons and none will be found. By clicking the "Get selected rows" you will see that the SelectedRows will return zero rows which is correct.
But when you afterwards click "Step two" (which will add five rows) it seems like there's one row preselected. I would expect the SelectedRows to return that row but by clicking "Get selected rows" again you will see that the returned rows are zero still. The CurrentRow, however is set to the preselected row as expected.
If you start by clicking "Step two" the SelectedRows actually returns the correct rows. Quite strange :-)
I know this is a very small issue and can be avoided. But as I mentioned there are other situations where this problem occurs and it's quite hard to figure out exactly what causes it.
Thank you for your help.
Best regards
Ulrik Skovenborg
Please use the attached sample project.
Hi There,
This call is only a nice to have, it is not critical at all. It is just a slight annoyance when building the Grid's columns - especially when there are many columns to adjust. My workflow is usually as follow.
Add all the columns needed, then after that I will run through all the columns and want to set the widths. But my speed is broken because I can't tab between the 3 width properties: Width, Min Width, Max Width. I have to click to put focus the the next value.
If possible, please can you correct the tab indexes?
Thank you
Kind Regards
Ben
PS. You may close this ticket immediately - this is only a request.
Please run the attached sample project. The row's height in the print document is not adjusted according to the column's width in the print page.
Workaround:
Usually for such cases it is convenient to increase the column's width in order to reduce its height and thus it would be able to fit the print page's height. In addition to adjusting the column's width, feel free to use multi-page printing:
To reproduce: please open the attached sample project and follow the steps illustrated in the attached gif file. Workaround: 1. You still can scroll while dragging a row by using the mouse wheel. 2. Use the grid in unbound mode and set the AllowRowReorder property to true instead of using a custom RadDragDropService. 3. Use a custom drag and drop service: public class CustomDragDropService : RadGridViewDragDropService { public CustomDragDropService(RadGridViewElement gridViewElement) : base(gridViewElement) { } public override string Name { get { return typeof(RadGridViewDragDropService).Name; } } protected override void HandleMouseMove(System.Drawing.Point mousePosition) { base.HandleMouseMove(mousePosition); System.Drawing.Point location = this.GridViewElement.ElementTree.Control.PointToClient(Control.MousePosition); GridTableElement tableElement = this.GetTableElementAtPoint(location); ISupportDrag supportDrag = this.Context as ISupportDrag; object dataContext = supportDrag.GetDataContext(); if (this.AllowAutoScrollRowsWhileDragging && dataContext == null) { ScrollRows(tableElement, location); } } private void ScrollRows(GridTableElement tableElement, System.Drawing.Point location) { ScrollableRowsContainerElement scrollableRows = tableElement.ViewElement.ScrollableRows; RadScrollBarElement vScrollbar = GetVeritcalScrollbar(tableElement); System.Drawing.Rectangle containerBounds = scrollableRows.ControlBoundingRectangle; if (containerBounds.Contains(location) || location.X < containerBounds.X || location.X > containerBounds.Right) { return; } int delta = 0; if (location.Y > containerBounds.Bottom) { delta = location.Y - containerBounds.Bottom; } else if (location.Y < containerBounds.Y) { delta = location.Y - containerBounds.Y; } if (delta != 0 && vScrollbar.Visibility == ElementVisibility.Visible) { vScrollbar.Value = ClampValue(vScrollbar.Value + delta, vScrollbar.Minimum, vScrollbar.Maximum - vScrollbar.LargeChange + 1); } } private int ClampValue(int value, int minimum, int maximum) { if (value < minimum) { return minimum; } if (maximum > 0 && value > maximum) { return maximum; } return value; } private RadScrollBarElement GetVeritcalScrollbar(GridTableElement tableElement) { if (GridViewElement.UseScrollbarsInHierarchy) { return tableElement.VScrollBar; } return GridViewElement.TableElement.VScrollBar; } } public RadForm1() { InitializeComponent(); CustomDragDropService customService = new CustomDragDropService(radGridView1.GridViewElement); radGridView1.GridViewElement.RegisterService(customService); }
Use the following code snippet:
ThemeResolutionService.ApplicationThemeName = "MaterialPink";
radGridView1.ElementTree.EnableApplicationThemeName = false;
radGridView1.ThemeName = "FluentDark";
Workaround:
private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
RadDropDownListEditor ddlEditor = e.ActiveEditor as RadDropDownListEditor;
if (ddlEditor != null)
{
RadDropDownListEditorElement el = ddlEditor.EditorElement as RadDropDownListEditorElement;
el.Popup.ElementTree.EnableApplicationThemeName = false;
el.Popup.ThemeName = this.radGridView1.ThemeName;
}
}
When the "x" is used it seems that AllowSearchRow is not set to false because the toggle button has then to be pressed twice to show up the search mask again.
Please refer to the attached sample project and follow the steps in the gif file.
Workaround: custom filtering to control which rows to be visible or not: https://docs.telerik.com/devtools/winforms/controls/gridview/filtering/custom-filtering
private void radGridView1_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e)
{
e.Handled = true;
e.Visible = e.Row.Cells["Value"].Value.Equals( Double.NaN);
}
Please refer to the attached sample project and follow the steps from the grid file:
Steps to reproduce:
1. Filter the checkbox column to only show unchecked rows
2. Enter "5" for filtering the Name column
3. Click the checkbox column on the bottom row
4. Remove filter value in the Name column
This will result in the unrelated record showing as checked. Scrolling or changing sorting may refresh the cell. If the filter is cleared by using the No filter menu option, the problem is not observed
If you define which columns to be printed on separate pages and try to use the Print Settings dialog to change the orientation for example, the multi-page printing gets lost:
Here is the code snippet which result is illustrated in the attached gif file:
Private Sub RadForm1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.CustomersTableAdapter.Fill(Me.NwindDataSet.Customers)
Me.RadGridView1.DataSource = Me.CustomersBindingSource
Me.RadGridView1.BestFitColumns()
End Sub
Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click
Dim document As New RadPrintDocument()
document.AssociatedObject = Me.RadGridView1
Dim printStyle As GridPrintStyle = New GridPrintStyle(RadGridView1)
Dim renderer As TableViewDefinitionPrintRenderer = New TableViewDefinitionPrintRenderer(RadGridView1)
renderer.PrintPages.Add(RadGridView1.Columns(0), RadGridView1.Columns(2), RadGridView1.Columns(5))
renderer.PrintPages.Add(RadGridView1.Columns(0), RadGridView1.Columns(1), RadGridView1.Columns(9))
renderer.PrintPages.Add(RadGridView1.Columns(8), RadGridView1.Columns(7))
renderer.PrintPages.Add(RadGridView1.Columns(3), RadGridView1.Columns(4), RadGridView1.Columns(6))
printStyle.PrintRenderer = renderer
RadGridView1.PrintStyle = printStyle
Dim dialog As New RadPrintPreviewDialog(document)
dialog.ShowDialog()
End Sub
You can also note it in demo application with this settings: