I'm using the RadGrid in DNN and everything works great.
However, I'm trying to implement a custom filter. Here's what I've got:
The header of my .ascx (Notice the "Register" directive):
|
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="admin.ascx.cs" Inherits="DesertedRoadStudios.Modules.DiscipleHatTournament.admin" %> |
|
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %> |
|
|
|
<%@ Register TagPrefix="custom" Namespace="DesertedRoadStudios.Controls" %> |
|
|
|
|
A few lines down, I have a RadGrid control with the registered control as one of my columns:
|
<custom:GenderCustomFilter UniqueName="gender" DataField="gender" HeaderText="Gender" /> |
|
|
In the code-behind:
|
namespace DesertedRoadStudios.Controls |
|
{ |
|
public class GenderCustomFilter : GridBoundColumn |
|
{ |
|
//RadGrid calls this method when it initializes the controls inside the filtering item cells |
|
protected override void SetupFilterControls(TableCell cell) |
|
{ |
|
base.SetupFilterControls(cell); |
|
cell.Controls.RemoveAt(0); |
|
DropDownList list = new DropDownList(); |
|
list.ID = "list" + this.DataField; |
|
|
|
list.AutoPostBack = true; |
|
list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged); |
|
list.Items.Add("Male"); |
|
list.Items.Add("Female"); |
|
cell.Controls.AddAt(0, list); |
|
cell.Controls.RemoveAt(1); |
|
} |
|
|
|
void list_SelectedIndexChanged(object sender, EventArgs e) |
|
{ |
|
GridFilteringItem filterItem = (sender as DropDownList).NamingContainer as GridFilteringItem; |
|
filterItem.FireCommandEvent("Filter", new Pair("Contains", this.UniqueName)); |
|
} |
|
|
|
//RadGrid calls this method when the value should be set to the filtering input control(s) |
|
protected override void SetCurrentFilterValueToControl(TableCell cell) |
|
{ |
|
base.SetCurrentFilterValueToControl(cell); |
|
DropDownList list = (DropDownList)cell.Controls[0]; |
|
if (this.CurrentFilterValue != string.Empty) |
|
{ |
|
list.SelectedValue = this.CurrentFilterValue; |
|
} |
|
} |
|
|
|
//RadGrid calls this method to extract the filtering value from the filtering input control(s) |
|
protected override string GetCurrentFilterValueFromControl(TableCell cell) |
|
{ |
|
DropDownList list = (DropDownList)cell.Controls[0]; |
|
return list.SelectedValue; |
|
} |
|
|
|
protected override string GetFilterDataField() |
|
{ |
|
return this.DataField; |
|
} |
|
} |
|
|
|
} |
|
|
Please notice a few things...
The .ascx inherits "DesertedRoadStudios.Modules.DiscipleHatTournament.admin" and the in the code-behind the public partial class "DesertedRoadStudios.Modules.DiscpleHatTournament.admin" inherits PortalModuleBase (what its suppose to inherit for DNN).
However, at the
END of the code-behind, I create a new namespace "DesertedRoadStudios.Controls" in which I place the custom filter "GenderCustomFilter" that inherits the GridBoundColumn.
I thought this would be okay, but perhaps, I'm not setting up the "Register" directive correctly. Nonetheless, the control "<custom:GenderCustomFilter />" cannot be located. How do I do this correctly without having to compile classes and install them into the DNN BIN folder?
Thanks,
Joshua