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

Telerik.Web.Ui.GridColumnCollection must have items of type 'Telerik.Web.UI.GridColumn'

1 Answer 466 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Mike Beaton
Top achievements
Rank 1
Mike Beaton asked on 03 Dec 2010, 11:45 AM
Hi

I am currently trying to use a custom filter on a GridTemplateColumn based on this example http://www.telerik.com/help/aspnet-ajax/grdimplementingfilteringfortemplatecolumns.html.

This works as expected but I lose designer support in visual studio and get the following error.
Telerik.Web.UI.GridColumnCollection must have items of type 'Telerik.Web.UI.GridColumn'. 'custom:TelerikFilterColumns' is of type 'RiskRegister.CustomFilterColumns.TelerikFilterColumns'.

Can anyone shed any light on this problem. I am using version 2009.2.701.20.

Thanks

My code follows

Filter class
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
using System.Data;
 
namespace WebApplication2
{
    public class Filter : GridTemplateColumn
    {
        protected override void SetupFilterControls(TableCell cell)
        {
            RadComboBox filterCombo = new RadComboBox();
            filterCombo.AutoPostBack = true;
            filterCombo.DataTextField = this.DataField;
            filterCombo.DataValueField = this.DataField;
            filterCombo.SelectedIndexChanged +=
                new RadComboBoxSelectedIndexChangedEventHandler(filterCombo_SelectedIndexChanged);
 
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Value", typeof(string));
 
            DataRow row = dt.NewRow();
            row["ID"] = 0;
            row["Value"] = 0;
 
            dt.Rows.Add(row);
 
            filterCombo.DataSource = dt;
            filterCombo.Width = this.FilterControlWidth;
            filterCombo.NoWrap = false;
            filterCombo.EmptyMessage = "No Filter";
            cell.Controls.Add(filterCombo);
        }
 
        private void filterCombo_SelectedIndexChanged(object sender,
            RadComboBoxSelectedIndexChangedEventArgs e)
        {
            ((GridFilteringItem)(((RadComboBox)sender).Parent.Parent)).FireCommandEvent("Filter", new Pair());
        }
 
        protected override void SetCurrentFilterValueToControl(TableCell cell)
        {
            base.SetCurrentFilterValueToControl(cell);
            if (!(this.CurrentFilterValue == ""))
            {
                ((RadComboBox)cell.Controls[0]).Items.FindItemByText(this.CurrentFilterValue).Selected = true;
            }
        }
 
        protected override string GetCurrentFilterValueFromControl(TableCell cell)
        {
            string currentValue = ((RadComboBox)cell.Controls[0]).SelectedItem.Value;
            this.CurrentFilterFunction = (currentValue != "") ? GridKnownFunction.EqualTo : GridKnownFunction.NoFilter;
            return currentValue;
        }
    }
}

Markup
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs"
    Inherits="WebApplication2.WebUserControl1" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Register Assembly="WebApplication2" Namespace="WebApplication2" TagPrefix="custom" %>
<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource">
    <MasterTableView DataKeyNames="ID" AutoGenerateColumns="false" AllowFilteringByColumn="True">
        <Columns>
            <custom:Filter DataField="Value" HeaderText="Val">  
            <ItemTemplate>
                        <asp:Label runat="server" ID="lblRiskArea" Text='<%# Bind("Value")%>' />
                    </ItemTemplate>                             
            </custom:Filter>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>

Code behind
using System;
using System.Data;
 
namespace WebApplication2
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
 
        protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID",typeof(int));
            dt.Columns.Add("Value",typeof(string));
 
            DataRow row = dt.NewRow();
            row["ID"] = 0;
            row["Value"] = 0;
 
            dt.Rows.Add(row);           
 
            RadGrid1.DataSource = dt;
        }
    }
}

1 Answer, 1 is accepted

Sort by
0
Mike Beaton
Top achievements
Rank 1
answered on 03 Dec 2010, 12:03 PM
Ok

So I fixed this issue when I found this post http://www.telerik.com/community/forums/aspnet-ajax/grid/driving-me-nuts.aspx and changed the

<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

with

<%@ Register Assembly="Telerik.Web.UI, Version=2009.2.701.20, Culture=neutral, PublicKeyToken=121FAE78165BA3D4" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

Can anyone advise why this happens and if this problem is fixed in the latest version.

Thanks
Tags
Grid
Asked by
Mike Beaton
Top achievements
Rank 1
Answers by
Mike Beaton
Top achievements
Rank 1
Share this question
or