This is a migrated thread and some comments may be shown as answers.

Cannot use a Guid as a ValueMember with Filtering on RadGridView

1 Answer 241 Views
GridView
This is a migrated thread and some comments may be shown as answers.
David
Top achievements
Rank 1
David asked on 16 Sep 2010, 10:18 PM
I have a RadGridView with a GridViewMultiComboBoxColumn in it.  

The GridView that pops up is working properly, and I have the columns I want to display, however, the ValueMember is set to a property that is a Guid type.  The entire column is bound to a Guid value, and the comboboxes are displaying a different value.  So far so good. 

The problem comes when I want to filter the grid by this Guid value.  I get various ParserExceptions, and they differ from Guid to Guid, based on the actual Guid.    One example is the following:

"Missing operator before c0aee operand."  

This is happening on a Guid whose value is 986c0aee-4987-4384-b8e6-551b2fb7a41e.  

I've pasted the stack trace below, and at it's root, it appears to be trying to set an expression that looks like this:

AssetID = 986c0aee-4987-4384-b8e6-551b2fb7a41e

Obviously, the parser is viewing the Guid as an arithmetic expression.  How can I fix this so that it will add the single quote properly?  I've been working on this for a while, and it's driving me nuts. 

I'm adding the columns within the GridView using the following solution: http://www.telerik.com/help/winforms/gridviewmulticomboboxcolumn.html


  Telerik.WinControls.dll!Telerik.Data.Expressions.ExpressionParser.Parse() + 0xe6 bytes
  Telerik.WinControls.dll!Telerik.Data.Expressions.ExpressionParser.Parse(string expression = "AssetID = 986c0aee-4987-4384-b8e6-551b2fb7a41e", bool caseSensitiveLike = false) + 0x14a bytes
  Telerik.WinControls.dll!Telerik.WinControls.Data.RadCollectionView<Telerik.WinControls.UI.GridViewRowInfo>.FilterExpression.set(string value = "AssetID = 986c0aee-4987-4384-b8e6-551b2fb7a41e") + 0x1ca bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewFilterDescriptorCollection.ApplyFilter() + 0x40 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewFilterDescriptorCollection.OnCollectionChanged(Telerik.WinControls.Data.NotifyCollectionChangedEventArgs args = {Telerik.WinControls.Data.NotifyCollectionChangedEventArgs}) + 0x4b bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewFilterDescriptorCollection.Item_PropertyChanged(object sender = {AssetID = 986c0aee-4987-4384-b8e6-551b2fb7a41e}, System.ComponentModel.PropertyChangedEventArgs e = {System.ComponentModel.PropertyChangedEventArgs}) + 0x63 bytes
  Telerik.WinControls.dll!Telerik.WinControls.Data.FilterDescriptor.OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs e = {System.ComponentModel.PropertyChangedEventArgs}) + 0x3d bytes
  Telerik.WinControls.dll!Telerik.WinControls.Data.FilterDescriptor.OnPropertyChanged(string propertyName = "Value") + 0x3d bytes
> Telerik.WinControls.dll!Telerik.WinControls.Data.FilterDescriptor.Value.set(object value = {986c0aee-4987-4384-b8e6-551b2fb7a41e}) + 0x4d bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewFilteringRowInfo.this[Telerik.WinControls.UI.GridViewColumn].set(Telerik.WinControls.UI.GridViewColumn column = {Asset (GridViewMultiComboBoxColumn)}, object value = {986c0aee-4987-4384-b8e6-551b2fb7a41e}) + 0x90 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridDataCellElement.Value.set(object value = {986c0aee-4987-4384-b8e6-551b2fb7a41e}) + 0x85 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridFilterCellElement.Editor_ValueChanged(object sender = {Telerik.WinControls.UI.RadMultiColumnComboBoxElement}, System.EventArgs e = {System.EventArgs}) + 0x173 bytes
  Telerik.WinControls.UI.dll!Telerik.WinControls.UI.EditorBaseElement.OnValueChanged(System.EventArgs args = {System.EventArgs}) + 0xb9 bytes
  Telerik.WinControls.UI.dll!Telerik.WinControls.UI.EditorBaseElement.OnTextChanged(System.EventArgs e = {System.EventArgs}) + 0x48 bytes
  Telerik.WinControls.UI.dll!Telerik.WinControls.UI.BaseComboBoxElement.CallOnTextChanged(System.EventArgs e = {System.EventArgs}) + 0x28 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.RadMultiColumnComboBoxElement.SetText(string text = "Roll-off Bin 51095-AR") + 0x85 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.RadMultiColumnComboBoxElement.SyncTextWithItem() + 0x1a4 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.RadMultiColumnComboBoxElement.OnGrid_CurrentRowChanged(object sender = {Telerik.WinControls.UI.MultiColumnComboGridView}, Telerik.WinControls.UI.CurrentRowChangedEventArgs e = {Telerik.WinControls.UI.CurrentRowChangedEventArgs}) + 0x22 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.RadGridView.OnCurrentRowChanged(object sender = {Telerik.WinControls.UI.MasterGridViewTemplate}, Telerik.WinControls.UI.CurrentRowChangedEventArgs e = {Telerik.WinControls.UI.CurrentRowChangedEventArgs}) + 0x43 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.EventDispatcher.RaiseEvent<Telerik.WinControls.UI.CurrentRowChangedEventArgs>(object eventKey = {object}, object sender = {Telerik.WinControls.UI.MasterGridViewTemplate}, Telerik.WinControls.UI.CurrentRowChangedEventArgs args = {Telerik.WinControls.UI.CurrentRowChangedEventArgs}) + 0xf4 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.MasterGridViewTemplate.ChangeCurrentRow(Telerik.WinControls.UI.GridViewRowInfo oldRow = null, Telerik.WinControls.UI.GridViewRowInfo row = {Telerik.WinControls.UI.GridViewDataRowInfo}, Telerik.WinControls.UI.GridViewTemplate viewTemplate = {Telerik.WinControls.UI.MasterGridViewTemplate}) + 0x21c bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.MasterGridViewTemplate.SetPositionCore(Telerik.WinControls.UI.GridViewRowInfo newRow = {Telerik.WinControls.UI.GridViewDataRowInfo}, Telerik.WinControls.UI.GridViewColumn newColumn = {AssetNumber (GridViewTextBoxColumn)}, Telerik.WinControls.UI.GridViewRowInfo oldRow = null, Telerik.WinControls.UI.GridViewColumn oldColumn = {AssetName (GridViewTextBoxColumn)}, bool validateRowChange = true) + 0xdc bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.MasterGridViewTemplate.SetPosition(Telerik.WinControls.UI.GridViewRowInfo row = {Telerik.WinControls.UI.GridViewDataRowInfo}, Telerik.WinControls.UI.GridViewColumn column = {AssetNumber (GridViewTextBoxColumn)}, bool validateRowChange = true) + 0x105 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.MasterGridViewTemplate.ProcessCurrentChanged(Telerik.WinControls.UI.GridViewEvent eventData = {Telerik.WinControls.UI.GridViewEvent}) + 0x19a bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.MasterGridViewTemplate.ProcessEventCore(Telerik.WinControls.UI.GridViewEvent eventData = {Telerik.WinControls.UI.GridViewEvent}) + 0x6a bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewTemplate.Telerik.WinControls.UI.IGridViewEventListener.ProcessEvent(Telerik.WinControls.UI.GridViewEvent eventData = {Telerik.WinControls.UI.GridViewEvent}) + 0x28 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewEventProcessEntity.ProcessCollection(Telerik.WinControls.UI.GridViewEvent gridEvent = {Telerik.WinControls.UI.GridViewEvent}, Telerik.WinControls.UI.PriorityWeakReferenceList list = {Telerik.WinControls.UI.PriorityWeakReferenceList}, Telerik.WinControls.UI.GridEventProcessMode processMode = Process) + 0xe0 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewEventProcessEntity.ProcessEvent(Telerik.WinControls.UI.GridViewEvent gridEvent = {Telerik.WinControls.UI.GridViewEvent}) + 0x51 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewSynchronizationService.NotifyListeners(Telerik.WinControls.UI.GridViewEvent gridEvent = {Telerik.WinControls.UI.GridViewEvent}) + 0x68 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewSynchronizationService.FlushEvents() + 0x1c8 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewSynchronizationService.DispatchEvent(Telerik.WinControls.UI.GridViewEvent gridEvent = {Telerik.WinControls.UI.GridViewEvent}) + 0xbc bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridViewSynchronizationService.RaiseCurrentChanged(Telerik.WinControls.UI.GridViewTemplate template = {Telerik.WinControls.UI.MasterGridViewTemplate}, Telerik.WinControls.UI.GridViewRowInfo row = {Telerik.WinControls.UI.GridViewDataRowInfo}, Telerik.WinControls.UI.GridViewColumn column = {AssetNumber (GridViewTextBoxColumn)}, bool user = true) + 0x149 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.BaseGridNavigator.SelectCore(Telerik.WinControls.UI.GridViewRowInfo row = {Telerik.WinControls.UI.GridViewDataRowInfo}, Telerik.WinControls.UI.GridViewColumn column = {AssetNumber (GridViewTextBoxColumn)}) + 0xa1 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.BaseGridNavigator.Select(Telerik.WinControls.UI.GridViewRowInfo row = {Telerik.WinControls.UI.GridViewDataRowInfo}, Telerik.WinControls.UI.GridViewColumn column = {AssetNumber (GridViewTextBoxColumn)}) + 0x137 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridRowBehavior.SelectPositionOnMouseDownLeft(System.Windows.Forms.MouseEventArgs e = {X = 128 Y = 121 Button = Left}, Telerik.WinControls.UI.GridRowElement rowElement = {Telerik.WinControls.UI.GridDataRowElement}, Telerik.WinControls.UI.GridCellElement cellElement = {Telerik.WinControls.UI.GridDataCellElement}) + 0x20d bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridRowBehavior.OnMouseDownLeft(System.Windows.Forms.MouseEventArgs e = {X = 128 Y = 121 Button = Left}) + 0x35c bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.GridRowBehavior.OnMouseDown(System.Windows.Forms.MouseEventArgs e = {X = 128 Y = 121 Button = Left}) + 0xed bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.BaseGridBehavior.OnMouseDown(System.Windows.Forms.MouseEventArgs e = {X = 128 Y = 121 Button = Left}) + 0xe7 bytes
  Telerik.WinControls.GridView.dll!Telerik.WinControls.UI.RadGridView.OnMouseDown(System.Windows.Forms.MouseEventArgs e = {X = 128 Y = 121 Button = Left}) + 0x45 bytes
  System.Windows.Forms.dll!System.Windows.Forms.Control.WmMouseDown(ref System.Windows.Forms.Message m, System.Windows.Forms.MouseButtons button, int clicks) Line 12945 C#



1 Answer, 1 is accepted

Sort by
0
Svett
Telerik team
answered on 22 Sep 2010, 12:34 PM
Hello David,

Presently, we do not support out of the box filtering by GUID values. Nevertheless, RadGridView allows you to extend and customize the filtering programmatically by using the Custom Filtering feature. You have to subscribe to the CustomFiltering event. In addition, you need to set the EnableFiltering and CustomDataOperation properties of the column as it shown in the following code snippet:

private void radGridView1_CustomFiltering(object sender, Telerik.WinControls.UI.GridViewCustomFilteringEventArgs e)
{
    Guid id = new Guid(Convert.ToString(e.RowInfo.Cells["GUID"].Value));
 
    e.Visible = id != Guid.Empty;
}
 
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
 
    DataTable table = new DataTable("table");
    table.Columns.Add("GUID", typeof(Guid));
    table.Columns.Add("Name", typeof(string));
 
    table.Rows.Add(Guid.NewGuid(), "Telerik");
    table.Rows.Add(Guid.NewGuid(), "Microsoft");
 
    this.radGridView1.EnableFiltering = true;
    this.radGridView1.DataSource = table;
    this.radGridView1.Columns["GUID"].CustomDataOperation = Telerik.WinControls.UI.CustomDataOperation.Filtering;
 
}

Notice that setting the filter by the context menu of filtering row is not working for GUID values.

Regards,
Svett
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
Tags
GridView
Asked by
David
Top achievements
Rank 1
Answers by
Svett
Telerik team
Share this question
or