Hello,
Below is how I initialize grid and filter
1. Page containing grid:
2. Create filter expressions and editors:
Thank you.
Below is how I initialize grid and filter
1. Page containing grid:
protected override void Page_Init(object sender, EventArgs e) { base.Page_Init(sender, e); Grid = new RadGrid(); // actually this is not RadGrid but descendant class I created Grid.Initialize(ZSheet, ForceLoad, DataSourceProvider, this); // create columns runtime ZSheetContainer.Controls.Add(Grid); GridFilter.Initialize(ZSheet, Grid.ZTable.TableNameUser); if (IsPostBack) GridFilter.ApplyFilter(); // create and apply filter expressions obtained from different source, see below }
2. Create filter expressions and editors:
public void ApplyFilter() { if (string.IsNullOrWhiteSpace(_hf.Value)) return; List<GridFilterItem> filterItems = new JavaScriptSerializer().Deserialize<List<GridFilterItem>>(_hf.Value); foreach (GridFilterItem item in filterItems) { ZSheetItem zitem = _table.Structure.FirstOrDefault(t => t.f_name == item.Condition.ColumnID); Type columnType = GetColumnType(zitem); Type filterExpressionType; Type[] types = new[] { columnType }; switch (item.Condition.Operator) { case GridKnownFunction.Contains: filterExpressionType = typeof(RadFilterContainsFilterExpression); break; case GridKnownFunction.DoesNotContain: filterExpressionType = typeof(RadFilterDoesNotContainFilterExpression); break; case GridKnownFunction.StartsWith: filterExpressionType = typeof(RadFilterStartsWithFilterExpression); break; case GridKnownFunction.EndsWith: filterExpressionType = typeof(RadFilterEndsWithFilterExpression); break; case GridKnownFunction.EqualTo: filterExpressionType = typeof(RadFilterEqualToFilterExpression<>); break; case GridKnownFunction.NotEqualTo: filterExpressionType = typeof(RadFilterNotEqualToFilterExpression<>); break; case GridKnownFunction.GreaterThan: filterExpressionType = typeof(RadFilterGreaterThanFilterExpression<>); break; case GridKnownFunction.LessThan: filterExpressionType = typeof(RadFilterLessThanFilterExpression<>); break; case GridKnownFunction.GreaterThanOrEqualTo: filterExpressionType = typeof(RadFilterGreaterThanOrEqualToFilterExpression<>); break; case GridKnownFunction.LessThanOrEqualTo: filterExpressionType = typeof(RadFilterLessThanOrEqualToFilterExpression<>); break; case GridKnownFunction.Between: filterExpressionType = typeof(RadFilterBetweenFilterExpression<>); types = new[] { columnType, columnType }; break; case GridKnownFunction.NotBetween: filterExpressionType = typeof(RadFilterNotBetweenFilterExpression<>); types = new[] { columnType, columnType }; break; case GridKnownFunction.IsEmpty: filterExpressionType = typeof(RadFilterIsEmptyFilterExpression); break; case GridKnownFunction.NotIsEmpty: filterExpressionType = typeof(RadFilterNotIsEmptyFilterExpression); break; case GridKnownFunction.IsNull: filterExpressionType = typeof(RadFilterIsNullFilterExpression); break; case GridKnownFunction.NotIsNull: filterExpressionType = typeof(RadFilterNotIsNullFilterExpression); break; default: filterExpressionType = typeof(RadFilterEqualToFilterExpression<>); break; } Type genericType = filterExpressionType.MakeGenericType(types); RadFilterExpression expression = (RadFilterExpression)Activator.CreateInstance(genericType, item.Condition.ColumnID); _filter.RootGroup.AddExpression(expression); }Now about the problem. When I call ApplyFilter from Page_Load() method, it raises a NullReferenceException in RadFilterDataEditor._filter.FireApplyCommand();}
CreateEditorFrom() method. When I call it from Page_Init() right after grid is initialized, filter won't apply. What am I doing wrong?Thank you.