Selected rows/cells of RadGridView should not be exporting with their selected visual styles and this is why when the export starts all selected rows are cleared. At the end of export selection is restored. This is the reason Validating/ed and SelectionChanged events are fired when exporting with RadGridView exports. Workaround: Unsubscribe from these events before the export starts and subscribe to them again when export operation is completed. this.radGridView1.RowValidating -= radGridView1_RowValidating; this.radGridView1.SelectionChanged -= radGridView1_SelectionChanged; // Export ExportToExcelML excelMLExporter = new ExportToExcelML(this.radGridView1); excelMLExporter.ExportVisualSettings = true; excelMLExporter.RunExport(fileName); this.radGridView1.RowValidating += radGridView1_RowValidating; this.radGridView1.SelectionChanged += radGridView1_SelectionChanged;
Workaround:
private void grid_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey)
{
this.grid.MasterTemplate.ListSource.BeginUpdate();
}
}
private void grid_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.ShiftKey)
{
this.grid.MasterTemplate.ListSource.EndUpdate();
}
}
How to reproduce: the MCCB column needs to be set with AutoCompleteMode.SuggestAppend
public partial class Form1 : Form
{
private List<MyComboItem> listItems;
public Form1()
{
InitializeComponent();
this.listItems = new List<MyComboItem>();
listItems.Add(new MyComboItem("Item1", "This is test for item1"));
listItems.Add(new MyComboItem("Atn time", "This is test for item2"));
listItems.Add(new MyComboItem("Bc chars", "This is test for item3"));
listItems.Add(new MyComboItem("Elsa", "This is test for item4"));
listItems.Add(new MyComboItem("Elementary", "This is test for item4"));
GridViewMultiComboBoxColumn gridviewColumn1 = radGridView1.Columns[0] as GridViewMultiComboBoxColumn;
if (gridviewColumn1 != null)
{
gridviewColumn1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
gridviewColumn1.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown;
gridviewColumn1.DataSource = listItems;
}
}
}
public class MyComboItem
{
public string Code { get; set; }
public string Description { get; set; }
public MyComboItem(string code, string description)
{
this.Code = code;
this.Description = description;
}
}
Workaround: handle the CellEditorInitialized and remove the selection
private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
if (radGridView1.CurrentColumn is GridViewMultiComboBoxColumn)
{
RadMultiColumnComboBoxElement editor = e.ActiveEditor as RadMultiColumnComboBoxElement;
if (editor != null && e.Row is GridViewNewRowInfo)
{
editor.SelectedIndex = -1;
}
}
}
To reproduce:
- Bind the grid to a list of the following objects:
public class Test
{
private Status _Status = Status.Value1;
public Status Status
{
get { return _Status; }
set { _Status = value; }
}
private string _Name = "";
public string Name
{
get { return _Name; }
set { _Name = value; }
}
}
public enum Status
{
Value1,
Value2,
Value3
}
- Group Name column.
- Open at least one group.
- Close grouping.
- Group status column.
- Try to open status group.
Workaround:
GridViewComboBoxColumn col = radGridView1.Columns[0] as GridViewComboBoxColumn;
col.DisplayMemberSort = true;
Workaround: subscribe to the PageChanged event and update the scroll range.
private void RadGridView1_PageChanged(object sender, EventArgs e)
{
this.RadGridView1.TableElement.RowScroller.UpdateScrollRange();
}
To reproduce: use the following code snippet and try to delete a child row:
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("ParentId", typeof(int));
dt.Columns.Add("Name", typeof(string));
for (int i = 0; i < 5; i++)
{
dt.Rows.Add(i, null, "Item" + i);
}
Random rand = new Random();
for (int i = 5; i < 30; i++)
{
dt.Rows.Add(i, rand.Next(0, 5), "Child item" + i);
}
this.radGridView1.Relations.AddSelfReference(this.radGridView1.MasterTemplate, "Id", "ParentId");
this.radGridView1.DataSource = dt;
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.UserDeletingRow += radGridView1_UserDeletingRow;
}
private void radGridView1_UserDeletingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e)
{
if (this.radGridView1.CurrentRow.HasChildRows())
{
DialogResult dialogResult = MessageBox.Show("Are you sure you want to delete this row?",
"Delete Row confirmation", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.No)
{
e.Cancel = true;
}
}
}
Workaround: use the RadGridView.CurrentRow.ChildRows.Count property.
To reproduce: - Set the row height to 1000. - Call the grid PrintPreview method. As workaround one can set the MaxHeight of the rows prior printing.
To reproduce: use the following code snippet and follow the steps from the attached gif file.
public Form1()
{
InitializeComponent();
List<Item> items = new List<Item>();
for (int i = 1; i < 10; i++)
{
items.Add(new Item(i, 0, "Item" + i));
}
Random rand = new Random();
for (int i = 10; i < 50; i++)
{
items.Add(new Item(i, rand.Next(1, 10), "Item" + i));
}
this.radGridView1.Relations.AddSelfReference(this.radGridView1.MasterTemplate, "Id", "ParentId");
this.radGridView1.DataSource = items;
this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.EnableFiltering = true;
this.radGridView1.ShowHeaderCellButtons = true;
}
public class Item
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
public Item(int id, int parentId, string name)
{
this.Id = id;
this.ParentId = parentId;
this.Name = name;
}
}
Workaround: use the basic filtering
To reproduce:
- Add a ColumnGroupsViewDefinition
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
VisualStudio2012LightTheme theme = new VisualStudio2012LightTheme();
Telerik.WinControls.ThemeResolutionService.ApplicationThemeName = theme.ThemeName;
this.radGridView1.BestFitColumns();
}
Workaround:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
this.radGridView1.BestFitColumns();
VisualStudio2012LightTheme theme = new VisualStudio2012LightTheme();
Telerik.WinControls.ThemeResolutionService.ApplicationThemeName = theme.ThemeName;
}
Workaround: custom RadGridViewDragDropService and an override of the HandleMouseMove method, please check the attached project
To reproduce:
void radGridView1_CellValueChanged(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
if (e.Value == null || e.Value == DBNull.Value)
{
e.Row.Delete();
}
}
- Use the enter key to confirm the change
Workaround:
void radGridView1_CellEndEdit(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
{
if (e.Value == null || e.Value == DBNull.Value)
{
e.Row.Delete();
}
}
Please refer to the attached sample project and follow the steps illustrated on the attached gif file.
Workaround: subscribe to the CellBeginEdit event and focus the grid:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
this.radGridView1.CellBeginEdit += radGridView1_CellBeginEdit;
}
private void radGridView1_CellBeginEdit(object sender, GridViewCellCancelEventArgs e)
{
this.radGridView1.Focus();
}
}
To reproduce: - Create a new Visual Studio project with a single form. - Add a RadGridView control to the form. - Add a child Template to the RadGridView. - In the properties of this child template, enable AutoExpand Groups. - Close the form editor and re-open.
How to reproduce:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
foreach (var col in this.radGridView1.Columns)
{
col.HeaderTextAlignment = ContentAlignment.MiddleLeft;
}
}
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Bool", typeof(bool));
dt.Columns.Add("Bool1", typeof(bool));
dt.Columns.Add("Bool2", typeof(bool));
for (int i = 0; i < 50; i++)
{
dt.Rows.Add("Name " + i, DateTime.Now.AddMinutes(i), i % 2 == 0 ? true : false, false, false);
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
this.radGridView1.PrintPreview();
}
}
Workaround:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.radGridView1.DataSource = this.GetData();
this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
this.radGridView1.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
this.radGridView1.PrintCellFormatting += radGridView1_PrintCellFormatting;
foreach (var col in this.radGridView1.Columns)
{
col.HeaderTextAlignment = ContentAlignment.MiddleLeft;
}
}
private void radGridView1_PrintCellFormatting(object sender, PrintCellFormattingEventArgs e)
{
if (e.Row is GridViewTableHeaderRowInfo && this.radGridView1.RightToLeft == System.Windows.Forms.RightToLeft.Yes)
{
e.PrintCell.TextAlignment = ContentAlignment.MiddleRight;
}
}
private DataTable GetData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Date", typeof(DateTime));
dt.Columns.Add("Bool", typeof(bool));
dt.Columns.Add("Bool1", typeof(bool));
dt.Columns.Add("Bool2", typeof(bool));
for (int i = 0; i < 50; i++)
{
dt.Rows.Add("Name " + i, DateTime.Now.AddMinutes(i), i % 2 == 0 ? true : false, false, false);
}
return dt;
}
private void radButton1_Click(object sender, EventArgs e)
{
this.radGridView1.PrintPreview();
}
}
To reproduce:
- Add a grid to a split panel.
- Edit a cell and resize the panel without ending the edit.
- Click back in the same cell.
Workaround:
private void RadGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
BaseGridEditor editor = e.ActiveEditor as BaseGridEditor;
var element = editor.EditorElement as RadTextBoxEditorElement;
if (element != null)
{
element.TextBoxItem.HostedControl.LostFocus -= HostedControl_LostFocus;
element.TextBoxItem.HostedControl.LostFocus += HostedControl_LostFocus;
}
}
private void HostedControl_LostFocus(object sender, EventArgs e)
{
this.RadGridView1.EndEdit();
}
Workaround: Inherit the GridViewSearchRowInfo and override the SelectNextSearchResult method
class MyGridViewSearchRowInfo : GridViewSearchRowInfo
{
private GridViewInfo gridViewInfo;
private RadGridView radGridView;
public MyGridViewSearchRowInfo(GridViewInfo gridViewInfo, RadGridView radGridView)
: base(gridViewInfo)
{
this.radGridView = radGridView;
}
public override Type RowElementType {
get { return typeof(GridSearchRowElement); }
}
public override void SelectNextSearchResult()
{
if (this.radGridView != null) {
this.radGridView.ElementTree.Control.Invoke(() => { base.SelectNextSearchResult(); });
}
}
}
To reproduce: - Add textbox and checkbox columns to a grid the checkbox column should not be visible without scrolling to the right. - Change the data source in the FilterChanged event. - Test this by moving the checkbox column in front of the text box column.
To reproduce:
1. Add a UserControl and drop a RadGridView in it.
2. Use the following code:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
ColumnGroupsViewDefinition view = new ColumnGroupsViewDefinition();
this.radGridView1.ViewDefinition = view;
view.ColumnGroups.Add(new GridViewColumnGroup("Group"));
view.ColumnGroups[0].Rows.Add(new GridViewColumnGroupRow() );
GridViewTextBoxColumn col = new GridViewTextBoxColumn("Col1");
this.radGridView1.Columns.Add(col);
view.ColumnGroups[0].Rows[0].ColumnNames.Add("Col1");
}
}
3. Drag the UserControl from the Toolbox to the form.
Workaround: set the ViewDefinition property after all columns are added.
Workaround: check the attached project
To reproduce: - Assing context menu using one of the default properties.