Workaround: use custom editor element private void radGridView1_EditorRequired(object sender, EditorRequiredEventArgs e) { if (e.EditorType == typeof(RadMultiColumnComboBoxElement)) { e.EditorType = typeof(MyRadMultiColumnComboBoxElement); } } public class MyRadMultiColumnComboBoxElement : RadMultiColumnComboBoxElement { protected override Type ThemeEffectiveType { get { return typeof(RadMultiColumnComboBoxElement); } } protected override void ProcessKeyDown(object sender, KeyEventArgs e) { base.ProcessKeyDown(sender, e); FieldInfo fi = this.GetType().BaseType.BaseType.GetField("oldTextValue", BindingFlags.Instance | BindingFlags.NonPublic); fi.SetValue(this, this.textBox.Text.Substring(0, this.textBox.SelectionStart)); } }
To reproduce: 1. Add a RadGridView with a GridViewMultiComboBoxColumn. Enable the auto filter functionality for this column and add an appropriate FilterDescriptor to the RadMultiColumnComboBoxElement. 2. Using the keyboard arrows only (no mouse), navigate to the GridViewMultiComboBoxColumn. 3. Type "ba" by using the keyboard. The "b" is lost and only the "a" gets to the filter. I expect the filter to show "ba". Workaround: use custom row behavior public Form1() { InitializeComponent(); //register the custom row behavior BaseGridBehavior gridBehavior = radGridView1.GridBehavior as BaseGridBehavior; gridBehavior.UnregisterBehavior(typeof(GridViewDataRowInfo)); gridBehavior.RegisterBehavior(typeof(GridViewDataRowInfo), new CustomGridDataRowBehavior()); } public class CustomGridDataRowBehavior : GridDataRowBehavior { protected override bool ProcessAlphaNumericKey(KeyPressEventArgs keys) { bool result = base.ProcessAlphaNumericKey(keys); if (this.IsInEditMode && (this.BeginEditMode == RadGridViewBeginEditMode.BeginEditOnKeystroke || this.BeginEditMode == RadGridViewBeginEditMode.BeginEditOnKeystrokeOrF2)) { if (this.GridViewElement.ActiveEditor is RadMultiColumnComboBoxElement) { this.GridViewElement.ActiveEditor.Value = keys.KeyChar; if (this.GridViewElement.IsInEditMode) { RadMultiColumnComboBoxElement mccb = (RadMultiColumnComboBoxElement)this.GridViewElement.ActiveEditor; RadTextBoxItem textBoxItem = mccb.TextBoxElement.TextBoxItem; textBoxItem.Clear(); textBoxItem.Text = keys.KeyChar.ToString(); textBoxItem.SelectionStart = 1; textBoxItem.SelectionLength = 0; } return true; } } return result; } }
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 - Add condition formatting object that changes the font. - Add cell style that changes the background only. Workaraound: Use the CellFormatting event instead of a style.
To reproduce: 1.Populate RadGridView with data and enable Excel-like filtering. 2.Click on a column filter icon and type in the Search textbox so more than two results appear. Then, click OK 2.The grid returns correct result. 3. Click on the previous column filter icon and navigate to Available Filters -> Contains 4. Evaluate the initial pop up dialog. Its conditions should be "Contains" and "Contains". Actually, it shows "Equals" and "Equals" according to the available filter. Workaround:By using the CreateCompositeFilterDialog event you can replace the default CompositeFilterForm with your custom one where you can load the selected filter operators.
To reproduce: GridViewMultiComboBoxColumn supplierColumn = new GridViewMultiComboBoxColumn(); supplierColumn.SyncSelectionWithText = true; supplierColumn.Name = "SupplierColumn"; supplierColumn.HeaderText = "Supplier"; supplierColumn.DropDownStyle = Telerik.WinControls.RadDropDownStyle.DropDown; supplierColumn.AutoCompleteMode = AutoCompleteMode.Append; supplierColumn.DataSource = this.suppliersBindingSource; supplierColumn.ValueMember = "SupplierID"; supplierColumn.DisplayMember = "ContactName"; supplierColumn.FieldName = "SupplierID"; supplierColumn.Width = 200; this.radGridView1.Columns.Add(supplierColumn); Select the new row and try to enter some text that is not valid and press Enter. You will notice the new row is added with the last valid auto-completed value. Workaround: cancel the UserAddingRow event if the entered text is not valid.
To reproduce: 1. Populate RadGridView with data 2. Export the grid by using the SpreadExport 3. Open the produce Excel file and select some cells to generate a chart in Excel. You will notice that it is not possible to create a complete chart with the selected data. Workaround: use the ExportToExcelML >> http://www.telerik.com/help/winforms/gridview-exporting-data-export-to-excel-via-excelml-format.html
To reproduce: private void Form1_Load(object sender, EventArgs e) { this.customersTableAdapter.Fill(this.nwindDataSet.Customers); GridViewMultiComboBoxColumn col = new GridViewMultiComboBoxColumn("MCCB column"); col.DataSource = this.customersBindingSource; col.DisplayMember = "ContactName"; col.ValueMember = "CustomerID"; this.radGridView1.Columns.Add(col); this.radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; } private void radGridView1_UserAddingRow(object sender, Telerik.WinControls.UI.GridViewRowCancelEventArgs e) { if (e.Rows.First().Cells[0].Value+"" =="ALFKI") { MessageBox.Show("Please select a product", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); e.Cancel = true; this.radGridView1.BeginEdit(); } } Please refer to the attached gif file. Workaround: use the NumericUpDown.MouseDown event and call the RadGridView.BeginEdit method instead of activating the editor in the UserAddingRow event.
When the current cell belongs to one of the data rows and you click with the left mouse button over a GridFilterCellElement , the editor is activated. However, if you navigate with the arrow keys, the editor is not activated and the user can not see any indication about the current cell. Workaround: private void radGridView1_ViewCellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e) { GridFilterCellElement filterCell = e.CellElement as GridFilterCellElement; if (filterCell != null) { if (filterCell.IsCurrent) { filterCell.BorderWidth = 3; } else { filterCell.BorderWidth = 1; } } }
Description: When you pin data rows from the child template to PinnedRowPosition.Top, it does not affect the row. However, when you pin the certain row to PinnedRowPosition.Bottom, the behavior is correct. The same issue is detected for the header rows from the child template.
1.Different naming of RadGridView templates (in the Smart tag - Relations section and in the Property Builder - Relations section) is confusing. 2.Column reordering via drag and drop in the same template. This action will change the object order of the grid. All changes are shown in the Preview section: I can select columns listed in the object tree, but cannot drag them up or down within a template. The only way I can reorder columns in the property builder appears to be by dragging them left or right in the preview pane. 3.Column moving via drag and drop from one template to another template. This action will change the object order of the grid. All changes are shown in the Preview section: I cannot move columns in the object tree from one template to another. 4.Template reordering via drag and drop. All changes are shown in the Preview section: drag and drop operation for templates in not allowed. 5.There is a right-click context menu for the object tree, with the following options: "Edit", "Expand / Collapse", "New", "Delete". Under no circumstances do the options "Edit" and "New" ever become enabled. 6.The preview pane displays a preview of the columns for the master template. When the child template is selected, the preview pane still shows a preview of the columns for the master template. As such, it is not possible to reorder columns for child templates in the preview pane. 7.When you set up the RadGridView hierarchy automatically at design time and open the Property Builder, all templates are visualized. It is possible to select/deselect columns from the different templates. It is possible to change columns names. However, when you press the OK button and close the Property Builder, try to reopen it. As a result you will notice that all columns from all child templates are selected and all columns contain the default names, no matter what changes were performed. Refer to the corresponding help article http://www.telerik.com/help/winforms/gridview-design-time-support-property-builder.html
Workaround: Private Sub radGridView1_CellFormatting(sender As Object, e As Telerik.WinControls.UI.CellFormattingEventArgs) If e.CellElement.IsPinned Then If e.CellElement.RowElement.DrawFill Then e.CellElement.DrawFill = False Else e.CellElement.ResetValue(LightVisualElement.DrawFillProperty, ValueResetFlags.Local) End If End If End Sub
Here is how this issue can be worked around: void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e) { ((RadMultiColumnComboBoxElement)e.ActiveEditor).AutoSizeDropDownToBestFit = true; ((RadMultiColumnComboBoxElement)e.ActiveEditor).DropDownAnimationEnabled = false; }
When one exports a grid with text written in right-to-left the exported file has all text written in left-to-right.
Use the attached sample project. Workaround: hide the columns programmatically at run time.
To reproduce: - Use RowFormatting to change the font style to bold. - Call the BestFitColumns method.
To reproduce: Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.RadGridView1.DataSource = Me.ProductsBindingSource Me.ProductsTableAdapter.Fill(Me.NwindDataSet.Products) Dim obj As New ConditionalFormattingObject("MyCondition", ConditionTypes.Greater, "30", "", False) obj.CellBackColor = Color.SkyBlue obj.CellForeColor = Color.Red obj.TextAlignment = ContentAlignment.MiddleRight Me.RadGridView1.Columns("UnitPrice").ConditionalFormattingObjectList.Add(obj) End Sub Private Sub RadButton1_Click(sender As Object, e As EventArgs) Handles RadButton1.Click Dim mySQL As String = "SELECT * FROM Products where ProductName = 'Chaii'" Dim myTable As DataTable = getDataInTable(mySQL, My.Settings.NwindConnectionString) Me.RadGridView1.DataSource = myTable End Sub Public Shared Function getDataInTable(mySQLorTable As String, myConnectionString As String, Optional myTimeout As Integer = 30) As DataTable Using myConnection As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Nwind.mdb") Dim myCommand As New OleDb.OleDbCommand(mySQLorTable, myConnection) myConnection.Open() Dim myDataTable As New DataTable Dim myAdapter As New OleDb.OleDbDataAdapter(myCommand) myAdapter.Fill(myDataTable) Return myDataTable End Using End Function When you click the button, the grid is refilled with the query result which does not contain any rows. As a result, a DataException is thrown for each column: "There is no property descriptor corresponding to property name: 'ColumnName'" . Workaround: clear the conditional formatting objects, reset the DataSource and add the conditional formatting objects back
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: 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(); } }
To reproduce: public Form1() { InitializeComponent(); BindingList<Item> items = new BindingList<Item>(); for (int i = 0; i < 10; i++) { items.Add(new Item(i,"Item" + i , DeliveryType.Type1)); } for (int i = 10; i < 20; i++) { items.Add(new Item(i, "Item" + i, DeliveryType.Type2)); } for (int i = 20; i < 30; i++) { items.Add(new Item(i, "Item" + i, DeliveryType.Type3)); } this.radGridView1.DataSource = items; this.radGridView1.AutoSizeColumnsMode = Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill; this.radGridView1.EnableFiltering = true; CompositeFilterDescriptor compositeFilter = new CompositeFilterDescriptor(); compositeFilter.FilterDescriptors.Add(new FilterDescriptor("DeliveryType", FilterOperator.IsEqualTo, DeliveryType.Type2)); compositeFilter.FilterDescriptors.Add(new FilterDescriptor("DeliveryType", FilterOperator.IsEqualTo, DeliveryType.Type3)); compositeFilter.LogicalOperator = FilterLogicalOperator.Or; this.radGridView1.FilterDescriptors.Add(compositeFilter); } public class Item { public int Id { get; set; } public string Name { get; set; } public DeliveryType DeliveryType { get; set; } public Item(int id, string name, DeliveryType deliveryType) { this.Id = id; this.Name = name; this.DeliveryType = deliveryType; } } public enum DeliveryType { Type1, Type2, Type3 } Workaround: use custom filtering: http://docs.telerik.com/devtools/winforms/gridview/filtering/custom-filtering