I'm in the process of implementing a grid that requires the FilterCheckList (like Excel) and BatchEditing (which requires GridTemplateColumn). In the grid below, the columns State & FullName work just fine, but once i turned the column "Days" into a template column, the filtering on that column stopped working. Any ideas? Currently using 2014.1.225.40. Thanks!
ASP.NET
<telerik:RadGrid ID="gridData" runat="server" Skin="Telerik" OnNeedDataSource="NeedDataSource_Data" AutoGenerateColumns="false" AllowSorting="true" AllowFilteringByColumn="true" ShowHeader="true" ShowFooter="true" Width="100%" OnFilterCheckListItemsRequested="RadGrid1_FilterCheckListItemsRequested" FilterType="CheckList" GridLines="Both" AllowPaging="false"> <GroupingSettings CaseSensitive="false" /> <MasterTableView DataKeyNames="ID, Days" CommandItemDisplay="Top" EditMode="Batch"> <BatchEditingSettings EditType="Row" /> <Columns> <telerik:GridBoundColumn DataField="FullName" SortExpression="FullName" HeaderText="Name" FilterCheckListEnableLoadOnDemand="true" AutoPostBackOnFilter="true" CurrentFilterFunction="Contains" ShowFilterIcon="false"></telerik:GridBoundColumn> <telerik:GridTemplateColumn DataField="Days" HeaderText="Idle" FilterCheckListEnableLoadOnDemand="true" AllowFiltering="true" SortExpression="Days" AutoPostBackOnFilter="true" UniqueName="Days"> <ItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Days") %> </ItemTemplate> <EditItemTemplate> <%# DataBinder.Eval(Container.DataItem, "Days") %> </EditItemTemplate> </telerik:GridTemplateColumn> <telerik:GridBoundColumn DataField="State" HeaderText="State" FilterCheckListEnableLoadOnDemand="true" ></telerik:GridBoundColumn> </Columns> </MasterTableView></telerik:RadGrid>C#
protected void RadGrid1_FilterCheckListItemsRequested(object sender, GridFilterCheckListItemsRequestedEventArgs e) { string DataField = e.Column.DataField; DataSet ds = (DataSet)Cache[cacheKey]; List<object> list = (from row in ds.Tables[0].AsEnumerable() select row[DataField]).Distinct().ToList(); DataTable dtResults = new DataTable(); dtResults.Columns.Add(DataField); DataRow drResult; foreach(object obj in list) { drResult = dtResults.NewRow(); drResult[DataField] = obj; dtResults.Rows.Add(drResult); } e.ListBox.DataSource = dtResults.AsEnumerable().Where(x => !x[DataField].ToString().IsNullOrEmpty()).OrderBy(y => y[DataField]).CopyToDataTable(); e.ListBox.DataKeyField = DataField; e.ListBox.DataTextField = DataField; e.ListBox.DataValueField = DataField; e.ListBox.DataBind(); }