I am trying to get the Telerik RadGridview control to filter, and am not having an error after selection. I am getting data back. Can someone spot what I’m doing wrong?
Error
Consulte o fim desta mensagem para obter detalhes sobre como invocar a depuração
JIT (just-in-time) em vez desta caixa de diálogo.Texto da excepção **************
Telerik.Data.Expressions.LexicalException: The expression contains invalid name: ‘[]’.
em Telerik.Data.Expressions.ExpressionParser.TryParse(Boolean enableExceptions, ExpressionNode& expressionNode)
em Telerik.Data.Expressions.ExpressionParser.Parse(String expression, Boolean caseSensitiveLike)
em Telerik.WinControls.Data.RadCollectionView1.set_FilterExpression(String value) em Telerik.WinControls.UI.GridViewFilterDescriptorCollection.ApplyFilter() em Telerik.WinControls.UI.GridViewFilterDescriptorCollection.OnCollectionChanged(NotifyCollectionChangedEventArgs args) em Telerik.Collections.Generic.NotifyCollection
1.InsertItem(Int32 index, T item)
em Telerik.WinControls.UI.GridViewFilterDescriptorCollection.InsertItem(Int32 index, FilterDescriptor item)
em System.Collections.ObjectModel.Collection`1.Add(T item)
em Telerik.WinControls.UI.GridViewDataColumn.SetFilterDescriptor(FilterDescriptor value)
em Telerik.WinControls.UI.GridHeaderCellElement.filterPopup_FilterConfirmed(Object sender, EventArgs e)
em Telerik.WinControls.UI.BaseFilterPopup.OnFilterConfirmed()
em Telerik.WinControls.UI.RadListFilterPopup.OnButtonOkClick(EventArgs e)
em Telerik.WinControls.UI.RadListFilterPopup.ButtonOK_Click(Object sender, EventArgs e)
em Telerik.WinControls.RadElement.OnClick(EventArgs e)
em Telerik.WinControls.UI.RadButtonItem.OnClick(EventArgs e)
em Telerik.WinControls.UI.RadButtonElement.OnClick(EventArgs e)
em Telerik.WinControls.RadElement.DoClick(EventArgs e)
em Telerik.WinControls.RadElement.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args)
em Telerik.WinControls.RadItem.RaiseBubbleEvent(RadElement sender, RoutedEventArgs args)
em Telerik.WinControls.RadElement.RaiseRoutedEvent(RadElement sender, RoutedEventArgs args)
em Telerik.WinControls.RadElement.DoMouseUp(MouseEventArgs e)
em Telerik.WinControls.ComponentInputBehavior.OnMouseUp(MouseEventArgs e)
em Telerik.WinControls.RadControl.OnMouseUp(MouseEventArgs e)
em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
em System.Windows.Forms.Control.WndProc(Message& m)
em System.Windows.Forms.ScrollableControl.WndProc(Message& m)
em Telerik.WinControls.RadControl.WndProc(Message& m)
em Telerik.WinControls.UI.RadPopupControlBase.WndProc(Message& m)
em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
em System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Data Load C#
```
private void usrAjuda_Load(object sender, EventArgs e){
JArray JRecords = new JArray();
retStatEx ret = Functions.getSQLreader(strSelect,"",ref JRecords);
ApiResultObj ent = Newtonsoft.Json.JsonConvert.DeserializeObject<ApiResultObj>(ret.retString);
if (ent.ErrorCode == 0){
grdDados.DataSource = JRecords;
grdDados.Columns[0].Width = 80;
}
}
```
Form Designer:
```
//
// grdDados
//
this.grdDados.AutoSizeRows = true;
this.grdDados.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.grdDados.Location = new System.Drawing.Point(12, 12);
//
//
//
this.grdDados.MasterTemplate.AllowAddNewRow = false;
this.grdDados.MasterTemplate.AllowColumnReorder = false;
this.grdDados.MasterTemplate.AllowDeleteRow = false;
this.grdDados.MasterTemplate.AllowEditRow = false;
this.grdDados.MasterTemplate.AutoSizeColumnsMode =
Telerik.WinControls.UI.GridViewAutoSizeColumnsMode.Fill;
this.grdDados.MasterTemplate.EnableFiltering = true;
this.grdDados.MasterTemplate.ShowFilteringRow = false;
this.grdDados.MasterTemplate.ShowHeaderCellButtons = true;
this.grdDados.MasterTemplate.ViewDefinition = tableViewDefinition1;
this.grdDados.Name = "grdDados";
this.grdDados.ReadOnly = true;
this.grdDados.ShowGroupPanel = false;
this.grdDados.ShowHeaderCellButtons = true;
this.grdDados.Size = new System.Drawing.Size(1062, 404);
this.grdDados.TabIndex = 0;
this.grdDados.ThemeName = "Crystal";
this.grdDados.CellDoubleClick += new
Telerik.WinControls.UI.GridViewCellEventHandler(this.grdDados_CellDoubleClick);
```
The problem is the missing datatype on the JArray.
Convert to a Datatable, fill the datatype , use the datatable as datasource and the error is solved.
// Function to convert JArray to DataTable
public static DataTable ConvertJArrayToDataTable(JArray jsonArray)
{
DataTable dataTable = new DataTable();
// Check if the array is not empty
if (jsonArray.Count > 0)
{
// Dynamically add columns based on the first object in the array
foreach (JProperty prop in jsonArray[0])
{
dataTable.Columns.Add(prop.Name, typeof(string)); // Add all columns as strings
}
// Iterate through the JArray and add rows to the DataTable
foreach (JObject obj in jsonArray)
{
DataRow row = dataTable.NewRow();
// Populate the row with values from the JObject
foreach (JProperty prop in obj.Properties())
{
if (prop.Value.Type == JTokenType.Integer)
row[prop.Name] = (int)prop.Value;
else if (prop.Value.Type == JTokenType.Boolean)
row[prop.Name] = (bool)prop.Value;
else
row[prop.Name] = prop.Value.ToString(); // Default to string
}
dataTable.Rows.Add(row); // Add the row to the DataTable
}
}