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

Filtering a GridTemplateColumn with Multiple Checkboxes

1 Answer 180 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Kyle
Top achievements
Rank 1
Kyle asked on 30 Dec 2011, 04:44 PM
I'm trying to figure out how to implement a filter on a template column that has multiple checkbox values.  

Scenario
The data source that I'm using for my grid control is an ObjectDataSource that is returning a list of business account objects.  This particular column represents a List<> of cost categories objects (contains a name field and boolean isUsed property) that the business account can be used for.  The customer wants all available cost categories displayed as check boxes with the ones associated to the current business account to be checked.  They want to be able to filter this column by selecting one cost category names from a drop down and it to filter the rows to only those that have that cost category checked.

The code below is from the current page (I removed industry specific terms for the sake of clarity). The selected cost categories are being correctly checked during the ItemDataBound and the filter template is being displayed correctly.  However, when I select a value I'm getting the error message following the code.

Code
<telerik:GridTemplateColumn FilterControlAltText="Filter AccountCostCategory column"
    HeaderText="Cost Category" UniqueName="AccountCostCategory">
    <ItemTemplate>
        <asp:CheckBox ID="chkAccountCostCategory_CC1" runat="server" Text="Cost Category 1" />
        <asp:CheckBox ID="chkAccountCostCategory_CC2" runat="server" Text="Cost Category 2" />
        <asp:CheckBox ID="chkAccountCostCategory_CC3" runat="server" Text="Cost Category 3" />
        <asp:CheckBox ID="chkAccountCostCategory_CC4" runat="server" Text="Cost Category 4" />
    </ItemTemplate>
    <FilterTemplate>
        <telerik:RadComboBox ID="ddlAccountCostCategoryFilter" SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("AccountCostCategory").CurrentFilterValue %>'
            runat="server" OnClientSelectedIndexChanged="AccountCostCategoryFilterChanged">
            <Items>
                <telerik:RadComboBoxItem Text="All" />
                <telerik:RadComboBoxItem Text="Cost Category 1" Value="CC1" />
                <telerik:RadComboBoxItem Text="Cost Category 2" Value="CC2" />
                <telerik:RadComboBoxItem Text="Cost Category 3" Value="CC3" />
                <telerik:RadComboBoxItem Text="Cost Category 4" Value="CC4" />
            </Items>
        </telerik:RadComboBox>
        <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
            <script type="text/javascript">
                function AccountCostCategoryFilterChanged(sender, args) {
                    var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
                    tableView.filter("AccountCostCategory", args.get_item().get_value(), Telerik.Web.UI.GridFilterFunction.EqualTo);
                }
            </script>
        </telerik:RadScriptBlock>
    </FilterTemplate>
    <ItemStyle Width="120px" BackColor="#FDE9D9" />
</telerik:GridTemplateColumn>

Error Message
Expression expected
 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
 
Exception Details: Telerik.Web.UI.ParseException: Expression expected
 
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 
 
Stack Trace:
[ParseException: Expression expected]
   Telerik.Web.UI.ExpressionParser.ParsePrimaryStart() +184
   Telerik.Web.UI.ExpressionParser.ParsePrimary() +17
   Telerik.Web.UI.ExpressionParser.ParseUnary() +115
   Telerik.Web.UI.ExpressionParser.ParseMultiplicative() +55
   Telerik.Web.UI.ExpressionParser.ParseAdditive() +60
   Telerik.Web.UI.ExpressionParser.ParseComparison() +55
   Telerik.Web.UI.ExpressionParser.ParseLogicalAnd() +55
   Telerik.Web.UI.ExpressionParser.ParseLogicalOr() +55
   Telerik.Web.UI.ExpressionParser.ParseExpression() +28
   Telerik.Web.UI.ExpressionParser.ParseArguments() +56
   Telerik.Web.UI.ExpressionParser.ParseIif() +94
   Telerik.Web.UI.ExpressionParser.ParseIdentifier() +221
   Telerik.Web.UI.ExpressionParser.ParsePrimary() +17
   Telerik.Web.UI.ExpressionParser.ParseUnary() +115
   Telerik.Web.UI.ExpressionParser.ParseMultiplicative() +55
   Telerik.Web.UI.ExpressionParser.ParseAdditive() +60
   Telerik.Web.UI.ExpressionParser.ParseComparison() +55
   Telerik.Web.UI.ExpressionParser.ParseLogicalAnd() +55
   Telerik.Web.UI.ExpressionParser.ParseLogicalOr() +55
   Telerik.Web.UI.ExpressionParser.ParseExpression() +28
   Telerik.Web.UI.ExpressionParser.ParseParenExpression() +52
   Telerik.Web.UI.ExpressionParser.ParsePrimary() +17
   Telerik.Web.UI.ExpressionParser.ParseUnary() +115
   Telerik.Web.UI.ExpressionParser.ParseMultiplicative() +55
   Telerik.Web.UI.ExpressionParser.ParseAdditive() +60
   Telerik.Web.UI.ExpressionParser.ParseComparison() +55
   Telerik.Web.UI.ExpressionParser.ParseLogicalAnd() +55
   Telerik.Web.UI.ExpressionParser.ParseLogicalOr() +55
   Telerik.Web.UI.ExpressionParser.ParseExpression() +28
   Telerik.Web.UI.ExpressionParser.Parse(Type resultType) +31
   Telerik.Web.UI.GridDynamicQueryable.Where(IQueryable source, String predicate, Object[] values) +172
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData35() +2148
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData() +855
   Telerik.Web.UI.GridResolveEnumerable.EnsureInitialized() +29
   Telerik.Web.UI.GridEnumerableFromDataView..ctor(GridTableView owner, IEnumerable enumerable, Boolean CaseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields, Boolean enableSplitHeaderText) +265
   Telerik.Web.UI.GridDataSourceHelper.CreateGridEnumerable(GridTableView owner, IEnumerable enumerable, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields, Boolean enableSplitHeaderText) +225
   Telerik.Web.UI.GridTableView.get_ResolvedDataSource() +411
   Telerik.Web.UI.GridTableView.CreateControlHierarchy(Boolean useDataSource) +392
   Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource) +858
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +94
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +182
   Telerik.Web.UI.GridTableView.PerformSelect() +206
   Telerik.Web.UI.GridTableView.DataBind() +432
   Telerik.Web.UI.RadGrid.OnBubbleEvent(Object source, EventArgs e) +159
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +52
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +50
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +52
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +102
   Telerik.Web.UI.RadGrid.RaisePostBackEvent(String eventArgument) +7403
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3707


Can someone point me in the right direction?

Thanks,
Kyle

1 Answer, 1 is accepted

Sort by
0
Kyle
Top achievements
Rank 1
answered on 30 Dec 2011, 07:10 PM
We solved it.  I talked this over with another developer here and we came up with the following solution:
1. Modified the Model Object to have a CostCategoryString property that is a "|" separated string of the Cost Category names that are selected.
2. Set the DataField to the CostCategoryString property
3. Change the last parameter of the .filter() call from Telerik.Web.UI.GridFilterFunction.EqualTo to Telerik.Web.UI.GridFilterFunction.Contains

This worked wonderfully in  every scenario that we had.

Thanks,
Kyle
Tags
Grid
Asked by
Kyle
Top achievements
Rank 1
Answers by
Kyle
Top achievements
Rank 1
Share this question
or