To reproduce: this.grid.Columns.Add(new GridViewDecimalColumn("col")); for (int i = 0; i < 5; i++) { this.grid.Rows.Add(i); } GridViewSummaryItem stDev = new GridViewSummaryItem() { Name = "col", Aggregate = GridAggregateFunction.Var // or GridAggregateFunction.StDev }; var row = new GridViewSummaryRowItem(); row.Add(stDev); this.grid.SummaryRowsTop.Add(row); This will throw an exception.
To reproduce: Create a project with RadGridView, add some rows, make sure you have space to perform panning. Pan up and down, exception should occur. Workaround : radgridView1.ViewDefinition = new MyTableViewDefinition(); public class MyTableViewDefinition : TableViewDefinition { public override IRowView CreateViewUIElement(GridViewInfo viewInfo) { return new MyGridTableElement(); } } public class MyGridTableElement : GridTableElement { protected override void OnPanGesture(Telerik.WinControls.PanGestureEventArgs args) { //base.OnPanGesture(args) -> you can stop touch support by also not calling the base and leaving this method empty if (args.IsBegin && (this.RowScroller.Scrollbar.ControlBoundingRectangle.Contains(args.Location) || this.ColumnScroller.Scrollbar.ControlBoundingRectangle.Contains(args.Location) || this.ViewElement.TopPinnedRows.ControlBoundingRectangle.Contains(args.Location))) { return; } bool containsCurrent = (this.GridViewElement.CurrentRow == null && this.GridViewElement.Template == this.ViewTemplate); if (!containsCurrent) { foreach (IRowView child in this.GridViewElement.GetRowViews(this.GridViewElement.CurrentRow.ViewInfo)) { containsCurrent |= (child == this); } } if (!containsCurrent) { return; } this.GridViewElement.EndEdit(); int newVerticalValue = this.RowScroller.Scrollbar.Value - args.Offset.Height; if (newVerticalValue > this.RowScroller.Scrollbar.Maximum - this.RowScroller.Scrollbar.LargeChange + 1) { newVerticalValue = this.RowScroller.Scrollbar.Maximum - this.RowScroller.Scrollbar.LargeChange + 1; } if (newVerticalValue < this.RowScroller.Scrollbar.Minimum) { newVerticalValue = this.RowScroller.Scrollbar.Minimum; } RadScrollBarElement rowScrollbar = this.RowScroller.Scrollbar; if (newVerticalValue > rowScrollbar.Maximum) { newVerticalValue = rowScrollbar.Maximum; } else if (newVerticalValue < 0) { newVerticalValue = 0; } this.RowScroller.Scrollbar.Value = newVerticalValue; int newHorizontalValue = this.ColumnScroller.Scrollbar.Value - args.Offset.Width; if (newHorizontalValue > this.ColumnScroller.Scrollbar.Maximum - this.ColumnScroller.Scrollbar.LargeChange + 1) { newHorizontalValue = this.ColumnScroller.Scrollbar.Maximum - this.ColumnScroller.Scrollbar.LargeChange + 1; } if (newHorizontalValue < this.ColumnScroller.Scrollbar.Minimum) { newHorizontalValue = this.ColumnScroller.Scrollbar.Minimum; } RadScrollBarElement columnScrollBar = this.ColumnScroller.Scrollbar; if (newHorizontalValue > columnScrollBar.Maximum) { newHorizontalValue = columnScrollBar.Maximum; } else if (newHorizontalValue < 0) { newHorizontalValue = 0; } this.ColumnScroller.Scrollbar.Value = newHorizontalValue; args.Handled = true; } }
To reproduce: - Use the code below on a new grid with 3 combo box columns - computer_id, computer_des, location_id public static DataTable dsComputerImages = null; public static DataTable dsLocations = null; private void loadComputerImagesGrid() { dsLocations = new DataTable(); DataColumn newColumn = new DataColumn("location_id", typeof(Int64)); dsLocations.Columns.Add(newColumn); newColumn = new DataColumn("location_des", typeof(String)); dsLocations.Columns.Add(newColumn); DataRow newRow = dsLocations.NewRow(); newRow["location_id"] = 1; newRow["location_des"] = "Boston"; dsLocations.Rows.Add(newRow); newRow = dsLocations.NewRow(); newRow["location_id"] = 2; newRow["location_des"] = "New York"; dsLocations.Rows.Add(newRow); newRow = dsLocations.NewRow(); newRow["location_id"] = 3; newRow["location_des"] = "Huston"; dsLocations.Rows.Add(newRow); dsComputerImages = new DataTable(); newColumn = new DataColumn("computer_id", typeof(Int64)); dsComputerImages.Columns.Add(newColumn); newColumn = new DataColumn("computer_des", typeof(String)); dsComputerImages.Columns.Add(newColumn); newColumn = new DataColumn("location_id", typeof(Int64)); dsComputerImages.Columns.Add(newColumn); newRow = dsComputerImages.NewRow(); newRow["computer_id"] = 1; newRow["computer_des"] = "AAA"; newRow["location_id"] = "1"; dsComputerImages.Rows.Add(newRow); newRow = dsComputerImages.NewRow(); newRow["computer_id"] = 2; newRow["computer_des"] = "BBB"; newRow["location_id"] = "1"; dsComputerImages.Rows.Add(newRow); newRow = dsComputerImages.NewRow(); newRow["computer_id"] = 3; newRow["computer_des"] = "CCC"; newRow["location_id"] = "2"; dsComputerImages.Rows.Add(newRow); newRow = dsComputerImages.NewRow(); newRow["computer_id"] = 4; newRow["computer_des"] = "DDD"; newRow["location_id"] = "3"; dsComputerImages.Rows.Add(newRow); this.ComputerImagesGrid.AutoGenerateColumns = false; this.ComputerImagesGrid.DataSource = dsComputerImages; this.ComputerImagesGrid.AutoSizeRows = true; } private void ComputerImagesGrid_DataBindingComplete(object sender, GridViewBindingCompleteEventArgs e) { ((GridViewComboBoxColumn)((RadGridView)sender).Columns["location_id"]).DataSource = dsLocations; ((GridViewComboBoxColumn)((RadGridView)sender).Columns["location_id"]).ValueMember = "location_id"; ((GridViewComboBoxColumn)((RadGridView)sender).Columns["location_id"]).DisplayMember = "location_des"; ((GridViewComboBoxColumn)((RadGridView)sender).Columns["location_id"]).DisplayMemberSort = true; }
To reproduce: Create a project with RadGridView, add some rows, make sure you have space to perform panning. Exception should occur. Workaround: this.myGridView.ViewDefinition = new MyTableViewDefinition(); public class MyTableViewDefinition : TableViewDefinition { public override IRowView CreateViewUIElement(GridViewInfo viewInfo) { return new MyGridTableElement(); } } public class MyGridTableElement : GridTableElement { protected override void OnPanGesture(Telerik.WinControls.PanGestureEventArgs args) { if (args.IsBegin && (this.RowScroller.Scrollbar.ControlBoundingRectangle.Contains(args.Location) || this.ColumnScroller.Scrollbar.ControlBoundingRectangle.Contains(args.Location) || this.ViewElement.TopPinnedRows.ControlBoundingRectangle.Contains(args.Location))) { return; } bool containsCurrent = (this.GridViewElement.CurrentRow == null && this.GridViewElement.Template == this.ViewTemplate); if (!containsCurrent) { foreach (IRowView child in this.GridViewElement.GetRowViews(this.GridViewElement.CurrentRow.ViewInfo)) { containsCurrent |= (child == this); } } if (!containsCurrent) { return; } this.GridViewElement.EndEdit(); int newVerticalValue = this.RowScroller.Scrollbar.Value - args.Offset.Height; if (newVerticalValue > this.RowScroller.Scrollbar.Maximum - this.RowScroller.Scrollbar.LargeChange + 1) { newVerticalValue = this.RowScroller.Scrollbar.Maximum - this.RowScroller.Scrollbar.LargeChange + 1; } if (newVerticalValue < this.RowScroller.Scrollbar.Minimum) { newVerticalValue = this.RowScroller.Scrollbar.Minimum; } this.RowScroller.Scrollbar.Value = newVerticalValue; int newHorizontalValue = this.ColumnScroller.Scrollbar.Value - args.Offset.Width; if (newHorizontalValue > this.ColumnScroller.Scrollbar.Maximum - this.ColumnScroller.Scrollbar.LargeChange + 1) { newHorizontalValue = this.ColumnScroller.Scrollbar.Maximum - this.ColumnScroller.Scrollbar.LargeChange + 1; } if (newHorizontalValue < this.ColumnScroller.Scrollbar.Minimum) { newHorizontalValue = this.ColumnScroller.Scrollbar.Minimum; } RadScrollBarElement scrollbar = this.ColumnScroller.Scrollbar; if (newHorizontalValue > scrollbar.Maximum) { newHorizontalValue = scrollbar.Maximum; } else if (newHorizontalValue < 0) { newHorizontalValue = 0; } this.ColumnScroller.Scrollbar.Value = newHorizontalValue; args.Handled = true; } }
To reproduce: Generate the hierarchy with the following code: radGridView1.SelectionMode = GridViewSelectionMode.CellSelect; radGridView1.MultiSelect = true; radGridView1.ClipboardCopyMode = GridViewClipboardCopyMode.EnableWithoutHeaderText; radGridView1.ClipboardPasteMode = GridViewClipboardPasteMode.Enable; radGridView1.AutoGenerateColumns = true; radGridView1.CellValueChanged += grid_CellValueChanged; //radGridView1.ViewCellFormatting += GridCellFormatting; //radGridView1.RowFormatting += grid_RowFormatting; radGridView1.EnableSorting = true; //radGridView1.MasterTemplate.EnableCustomSorting = true; radGridView1.AllowMultiColumnSorting = true; radGridView1.ShowGroupPanel = true; radGridView1.EnableFiltering = true; radGridView1.ShowFilteringRow = false; radGridView1.MasterTemplate.ShowHeaderCellButtons = true; DataTable dt1 = new DataTable(); dt1.Columns.Add("Column1"); dt1.Columns.Add("Column2"); dt1.Columns.Add("Column3"); dt1.Columns.Add("Column4"); dt1.Columns.Add("Column5"); dt1.Columns.Add("Column6"); dt1.Columns.Add("Column7"); dt1.Columns.Add("Column8"); dt1.Columns.Add("Column9"); dt1.Columns.Add("Column10"); DataTable dt2 = new DataTable(); dt2.Columns.Add("Column1"); dt2.Columns.Add("Column2"); dt2.Columns.Add("Column3"); dt2.Columns.Add("Column4"); dt2.Columns.Add("Column5"); dt2.Columns.Add("Column6"); dt2.Columns.Add("Column7"); dt2.Columns.Add("Column8"); dt2.Columns.Add("Column9"); var temp = new GridViewTemplate(); temp.AutoGenerateColumns = true; radGridView1.Templates.Add(temp); var rel = new GridViewRelation(radGridView1.MasterTemplate, temp); rel.ChildColumnNames.Add("Column1"); rel.ParentColumnNames.Add("Column1"); radGridView1.Relations.Add(rel); radGridView1.MasterTemplate.DataSource = dt1; dt1.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(3, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(4, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(5, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); temp.DataSource = dt2; 1. Run the project with the generated hierarchy 2. Select second cell in first row. 3. Expand first row and select 3 cells in fifth column by mouse drag 4. Right click on selection and "Copy" or press Ctrl+C. 5. Try to Paste the data into 7-th column. 6. The data is pasted in the second column
To reproduce: Generate the hierarchy with the following code: radGridView1.SelectionMode = GridViewSelectionMode.CellSelect; radGridView1.MultiSelect = true; radGridView1.ClipboardCopyMode = GridViewClipboardCopyMode.EnableWithoutHeaderText; radGridView1.ClipboardPasteMode = GridViewClipboardPasteMode.Enable; radGridView1.AutoGenerateColumns = true; radGridView1.CellValueChanged += grid_CellValueChanged; //radGridView1.ViewCellFormatting += GridCellFormatting; //radGridView1.RowFormatting += grid_RowFormatting; radGridView1.EnableSorting = true; //radGridView1.MasterTemplate.EnableCustomSorting = true; radGridView1.AllowMultiColumnSorting = true; radGridView1.ShowGroupPanel = true; radGridView1.EnableFiltering = true; radGridView1.ShowFilteringRow = false; radGridView1.MasterTemplate.ShowHeaderCellButtons = true; DataTable dt1 = new DataTable(); dt1.Columns.Add("Column1"); dt1.Columns.Add("Column2"); dt1.Columns.Add("Column3"); dt1.Columns.Add("Column4"); dt1.Columns.Add("Column5"); dt1.Columns.Add("Column6"); dt1.Columns.Add("Column7"); dt1.Columns.Add("Column8"); dt1.Columns.Add("Column9"); dt1.Columns.Add("Column10"); DataTable dt2 = new DataTable(); dt2.Columns.Add("Column1"); dt2.Columns.Add("Column2"); dt2.Columns.Add("Column3"); dt2.Columns.Add("Column4"); dt2.Columns.Add("Column5"); dt2.Columns.Add("Column6"); dt2.Columns.Add("Column7"); dt2.Columns.Add("Column8"); dt2.Columns.Add("Column9"); var temp = new GridViewTemplate(); temp.AutoGenerateColumns = true; radGridView1.Templates.Add(temp); var rel = new GridViewRelation(radGridView1.MasterTemplate, temp); rel.ChildColumnNames.Add("Column1"); rel.ParentColumnNames.Add("Column1"); radGridView1.Relations.Add(rel); radGridView1.MasterTemplate.DataSource = dt1; dt1.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(3, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(4, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(5, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); temp.DataSource = dt2; 1. Run the project with the generated hierarchy 2. Select Last cell in first row. (there is no "Column9" in Child Template) 3. Expand first row and select any cell in first child row. 4. Hold Shift-Key and press down arrow or up arrow until you receive a NullReferenceException.
To reproduce: - generate the hierarchy using the following code: radGridView1.SelectionMode = GridViewSelectionMode.CellSelect; radGridView1.MultiSelect = true; radGridView1.ClipboardCopyMode = GridViewClipboardCopyMode.EnableWithoutHeaderText; radGridView1.ClipboardPasteMode = GridViewClipboardPasteMode.Enable; radGridView1.AutoGenerateColumns = true; radGridView1.CellValueChanged += grid_CellValueChanged; radGridView1.EnableSorting = true; radGridView1.AllowMultiColumnSorting = true; radGridView1.ShowGroupPanel = true; radGridView1.EnableFiltering = true; radGridView1.ShowFilteringRow = false; radGridView1.MasterTemplate.ShowHeaderCellButtons = true; DataTable dt1 = new DataTable(); DataTable dt2 = new DataTable(); for (int i = 0; i < 10; i++) { dt1.Columns.Add("Column" + i); dt2.Columns.Add("Column" + i); } var temp = new GridViewTemplate(); temp.AutoGenerateColumns = true; radGridView1.Templates.Add(temp); var rel = new GridViewRelation(radGridView1.MasterTemplate, temp); rel.ChildColumnNames.Add("Column1"); rel.ParentColumnNames.Add("Column1"); radGridView1.Relations.Add(rel); radGridView1.MasterTemplate.DataSource = dt1; dt1.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(3, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(4, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt1.Rows.Add(5, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6, 9); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(1, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); dt2.Rows.Add(2, "sdf", "sdfsfqwert", 1, 2, 3, 4, 7, 6); temp.DataSource = dt2; 1. Run the project with the generated hierarchy 2. Select second cell in first row. 3. Expand first row and select fifth cell in first child row. 4. Hold Shift-Key and press down arrow after that right arrow twice. selection will be incorrect
To reproduce: -set AutoSizeMode to Fill - Add view definition with two rows - Add check box column to the view -Set check box column minWidth Workaround: Create a custom view definition, then create a custom ColumnGroupRowLayout class and override the GetClumnWidth method like this: class MyViewDefinition : ColumnGroupsViewDefinition { public MyViewDefinition() { } public override IGridRowLayout CreateRowLayout() { return new MyRowLayout(this); } } public class MyRowLayout : ColumnGroupRowLayout { public MyRowLayout(ColumnGroupsViewDefinition view):base(view) { } public override int GetColumnWidth(GridViewColumn column) { return Math.Max( base.GetColumnWidth(column), column.MinWidth); } }
Steps to reproduce: 1. Add three rows to a grid 2. Filter one through CustomFiltering 3. Run the project and apply a filter that will filter one of the remaining two rows 4. Now delete the filter value. You will see that the second row will not be visible although there is no filter. WORKAROUND Clear the filter on the column when the user deletes the value of the filter: private void radGridView1_ValueChanging(object sender, ValueChangingEventArgs e) { if (this.radGridView1.CurrentColumn.Name == "ColumnName" && Convert.ToString(e.NewValue) == String.Empty) { int i = 0; while (i < this.radGridView1.FilterDescriptors.Count) { if (this.radGridView1.FilterDescriptors[i].PropertyName == "ColumnName") { this.radGridView1.FilterDescriptors.RemoveAt(i); continue; } i++; } } }
Workaround, use the following behavior: public class CustomDataRowBehavior : GridDataRowBehavior { protected override bool OnMouseDownRight(MouseEventArgs e) { if (this.IsInEditMode && !this.GridViewElement.EndEdit())
To reproduce, use the following code: Dim decimalCol As New GridViewMaskBoxColumn decimalCol.FieldName = "DecimalPhone" Me.RadGridView1.Columns.Add(decimalCol) decimalCol.DataType = GetType(Decimal) decimalCol.FormatString = "{0:(###) ###-####}" decimalCol.MaskType = MaskType.Standard decimalCol.Mask = "(###) ###-####" Try the following cases: 1. Go to an empty cell and press "1" -> the result is that you see the mask "(1__) ___-_____", however the caret is before it and continuing to type in the editor will replace the already added character 2. Click on an empty cell - the cell is opened for edit, however, the mask is not displayed. Furthermore, when you start typing and you press "1" -> the result is that you see the mask "(1__) ___-_____", however the caret is before it and continuing to type in the editor will replace the already added character
To reproduce, use the following code: ((GridViewMaskBoxColumn)radGridView1.Columns["MaskEditBoxColumn"]).DataType = typeof(decimal); ((GridViewMaskBoxColumn)radGridView1.Columns["MaskEditBoxColumn"]).FormatString = "{0:(###) ###-####}"; ((GridViewMaskBoxColumn)radGridView1.Columns["MaskEditBoxColumn"]).MaskType = MaskType.Standard; ((GridViewMaskBoxColumn)radGridView1.Columns["MaskEditBoxColumn"]).Mask = "(###) ###-####"; ((GridViewMaskBoxColumn)radGridView1.Columns["MaskEditBoxColumn"]).TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; and add a numeric value in one of the column cells. Result -> Exception has been thrown by the target of an invocation. Workaround: Use a custom type converter: ((GridViewMaskBoxColumn)radGridView1.Columns["MaskEditBoxColumn"]).DataTypeConverter = new MyConverter(); public class MyConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return sourceType == typeof(string); } public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) { if (destinationType == typeof(string)) { return true; } return base.CanConvertTo(context, destinationType); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { string s = value.ToString(); s= s.Insert(0, "("); if (value.ToString().Length > 3) { s= s.Insert(4, ")"); } if (value.ToString().Length > 7) { s= s.Insert(8, "-"); } return s; } return base.ConvertTo(context, culture, value, destinationType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string s = value.ToString(); s = s.Replace("(", ""); s = s.Replace(")", ""); s = s.Replace("-", ""); return Convert.ToDecimal(s); } }
Currently all export mechanisms export the first child view of a hierarchy row. There should be a mechanism to allow users to choose which view to be exported.
There should be a fit mode which allows one to print a RadGridView on two pages.
If one follows the guide from the online documentation to create custom summary cell element he will no be able to use it in a custom column: http://www.telerik.com/help/winforms/gridview-cells-custom-cells.html The issue is that the GetCellType method of the column is never called for summary rows.
To reproduce, use the following localization provider and set a fitler to a boolean column in RadGridView, via the Custom filtering dialog. class MyRadGridLocalizationProvider : RadGridLocalizationProvider { public const string CustomTrue = "CustomTRUE"; public const string CustomFalse = "CustomFALSE"; public override string GetLocalizedString(string id) { if (id == "CustomFilterDialogTrue") { return CustomTrue; } else if (id == "CustomFilterDialogFalse") { return CustomFalse; } else { return base.GetLocalizedString(id); } } } Workaround - create custom type converter as follows: public class MyBooleanConverter : BooleanConverter { public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { if (value is string) { string text = Convert.ToString(value); if (text == MyRadGridLocalizationProvider.CustomTrue) { return true; } else if (text == MyRadGridLocalizationProvider.CustomFalse) { return false; } } return base.ConvertFrom(context, culture, value); } } and apply it to the check box column: radGridView1.Columns["BoolColumn"].DataTypeConverter = new MyBooleanConverter();
Steps to reproduce: 1. Add a grid to a form and add two expression columns 2. Enable Excel-like filtering 3. Add data 4. Run the project and filter on both expression columns You will see an exception.
If you end edit of sorted decimal column by pressing ENTER key, the StackOverflowException is thrown.
1. Create a new project with RadGridView and bind it. 2. Add a GridViewComboBoxColumn and bind it to a generic list that contains KeyValuePair instancess. Set the key to be an enum and set the ValueMember property of the column to point to this field. 3. Run the project and try to filter by this column.
To reproduce: - Set BeginEditMod to BeginEditProgrammatically - Check/uncheck a check box cell and you will be able to edit the rest of the cells