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

Custom Filter on Image column yields exception: is neither a DataColumn nor a DataRelation for table DefaultView.

1 Answer 102 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Kyle Smith
Top achievements
Rank 1
Kyle Smith asked on 22 Feb 2013, 04:45 PM
My image column:
<telerik:GridImageColumn DataImageUrlFields="Stage" UniqueName="Stage" DataImageUrlFormatString="Images/{0}.png" ImageAlign="Middle" HeaderText="Step"
    AllowFiltering="true" ShowFilterIcon="False" AutoPostBackOnFilter="True" ShowSortIcon="False">
    <HeaderStyle Width="80px" Font-Bold="true" />
    <ItemStyle Width="80px" />
    <FilterTemplate>
        <telerik:RadComboBox ID="StageFilter" runat="server" HighlightTemplatedItems="True" OnClientSelectedIndexChanged="RTAStepFilterChanged"
            SelectedValue='<%# ((GridItem)Container).OwnerTableView.GetColumn("Stage").CurrentFilterValue %>' Width="51px" DropDownWidth="69px" ShowSortIcon="False">
            <ItemTemplate>
                <div><img src='<%# DataBinder.Eval(Container, "ImageUrl") %>' alt="" /></div>
            </ItemTemplate>
            <Items>
                <telerik:RadComboBoxItem Text="" Value="" ImageUrl="Images/nofilter.png" />
                <telerik:RadComboBoxItem Text="1" Value="1" ImageUrl="Images/1.png" />
                <telerik:RadComboBoxItem Text="2" Value="2" ImageUrl="Images/2.png" />
                <telerik:RadComboBoxItem Text="3" Value="3" ImageUrl="Images/3.png" />
                <telerik:RadComboBoxItem Text="4" Value="4" ImageUrl="Images/4.png" />
                <telerik:RadComboBoxItem Text="5" Value="5" ImageUrl="Images/5.png" />
                <telerik:RadComboBoxItem Text="6" Value="6" ImageUrl="Images/6.png" />
                <telerik:RadComboBoxItem Text="7" Value="7" ImageUrl="Images/7.png" />
                <telerik:RadComboBoxItem Text="8" Value="8" ImageUrl="Images/8.png" />
                <telerik:RadComboBoxItem Text="X" Value="0" ImageUrl="Images/cancel.png" />
            </Items>
        </telerik:RadComboBox>
        <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">
            <script type="text/javascript">
                function RTAStepFilterChanged(sender, args) {
                    var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>");
                    var filterValue = args.get_item().get_value();
                    tableView.filter("Stage", filterValue, Telerik.Web.UI.GridFilterFunction.Contains);
                }
            </script>
        </telerik:RadScriptBlock>
    </FilterTemplate>
</telerik:GridImageColumn>

Server Error in '/' Application.

is neither a DataColumn nor a DataRelation for table DefaultView.

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: System.ArgumentException: is neither a DataColumn nor a DataRelation for table DefaultView.

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: 


[ArgumentException:  is neither a DataColumn nor a DataRelation for table DefaultView.]
   System.Data.DataRowView.get_Item(String property) +1338062
   lambda_method(Closure , DataRowView ) +59
   System.Linq.WhereEnumerableIterator`1.MoveNext() +139
   System.Linq.Enumerable.Count(IEnumerable`1 source) +4083557
   lambda_method(Closure ) +265
   System.Linq.EnumerableExecutor`1.Execute() +94
   System.Linq.EnumerableExecutor`1.ExecuteBoxed() +23
   System.Linq.EnumerableQuery`1.System.Linq.IQueryProvider.Execute(Expression expression) +94
   Telerik.Web.UI.GridDynamicQueryable.Count(IQueryable source) +313
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData35() +4445
   Telerik.Web.UI.GridDataTableFromEnumerable.FillData() +1078
   Telerik.Web.UI.GridResolveEnumerable.Initialize() +58
   Telerik.Web.UI.GridResolveEnumerable.EnsureInitialized() +45
   Telerik.Web.UI.GridResolveEnumerable.get_DataTable() +36
   Telerik.Web.UI.GridEnumerableFromDataView..ctor(GridTableView owner, DataView dataView, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields, Boolean enableSplitHeaderText) +244
   Telerik.Web.UI.GridDataSourceHelper.CreateGridEnumerable(GridTableView owner, IEnumerable enumerable, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields, Boolean enableSplitHeaderText) +109
   Telerik.Web.UI.GridDataSourceHelper.GetResolvedDataSource(GridTableView owner, Object dataSource, String dataMember, Boolean caseSensitive, Boolean autoGenerateColumns, GridColumnCollection presentColumns, String[] additionalField, Boolean retrieveAllFields, Boolean enableSplitHeaderText) +755
   Telerik.Web.UI.GridTableView.get_ResolvedDataSource() +257
   Telerik.Web.UI.GridTableView.CreateControlHierarchy(Boolean useDataSource) +727
   Telerik.Web.UI.GridTableView.CreateChildControls(IEnumerable dataSource, Boolean useDataSource) +1286
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +67
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +123
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +33
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138
   Telerik.Web.UI.GridTableView.PerformSelect() +38
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
   Telerik.Web.UI.GridTableView.DataBind() +387
   Telerik.Web.UI.GridTableView.Rebind() +108
   Telerik.Web.UI.GridFilterCommandEventArgs.ExecuteCommand(Object source) +1018
   Telerik.Web.UI.RadGrid.OnBubbleEvent(Object source, EventArgs e) +205
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +71
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   Telerik.Web.UI.GridItem.OnBubbleEvent(Object source, EventArgs e) +147
   Telerik.Web.UI.GridItem.FireCommandEvent(String commandName, Object commandArgument) +88
   Telerik.Web.UI.RadGrid.RaisePostBackEvent(String eventArgument) +12205
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642898
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18033



I am not sure what I am doing wrong here. Is this even possible? My Data Source is an SQLDataSource and it is used a stored procedure. The column is populated and images are displayed.

1 Answer, 1 is accepted

Sort by
0
Kyle Smith
Top achievements
Rank 1
answered on 25 Feb 2013, 08:03 PM
Solved on my own. I had to handle the Filter command myself:

protected void RtaTrackerGrid_ItemCommand(object sender, GridCommandEventArgs e)
        {
            if (e.CommandName == RadGrid.FilterCommandName)
            {
                Pair filterPair = (Pair)e.CommandArgument;
 
                if (filterPair.Second.ToString() == "Stage")
                {
                    e.Canceled = true; // We need to handle ourselves
 
                    GridFilteringItem filteringItem = e.Item as GridFilteringItem;
                    TableCell stageFilterCell = filteringItem["Stage"];
                    RadComboBox filterDropDown = stageFilterCell.FindControl("StageFilter") as RadComboBox;
 
                    string newFilter = string.Format("(it[\"Stage\"].ToString().ToUpper().Contains(\"{0}\".ToUpper()))", filterDropDown.SelectedValue);
 
                    if (RtaTrackerGrid.MasterTableView.FilterExpression == "")
                    {
                        RtaTrackerGrid.MasterTableView.FilterExpression = newFilter;
                    }
                    else
                    {
                        // Expression is not empty, let's re-build it
                        StringBuilder sb = new StringBuilder();
 
                        foreach (GridColumn column in RtaTrackerGrid.Columns)
                        {
                            if (column.UniqueName == "Stage")
                            {
                                continue;
                            }
 
                            if (!string.IsNullOrWhiteSpace(column.CurrentFilterValue))
                            {
                                sb.AppendFormat("(it[\"{0}\"].ToString().ToUpper().Contains(\"{1}\".ToUpper()))", column.UniqueName, column.CurrentFilterValue);
                                sb.Append(" && ");
                            }
                        }
 
                        sb.Append(newFilter);
 
                        RtaTrackerGrid.MasterTableView.FilterExpression = sb.ToString();
                    }
 
                    RtaTrackerGrid.Rebind();
                }
            }
        }
Tags
Grid
Asked by
Kyle Smith
Top achievements
Rank 1
Answers by
Kyle Smith
Top achievements
Rank 1
Share this question
or