Hello,
I'm experiencing some trouble in the google-like filtering demo ( http://demos.telerik.com/aspnet-ajax/controls/examples/integration/gridandcombo/defaultcs.aspx?product=grid ).
The ItemRequested event is never fired, Loading statement stands forever without displaying any results.
This is my implementation of the gridboundcolumn :
protected override void SetupFilterControls(TableCell cell)
{
base.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
RadComboBox combo = new RadComboBox();
combo.ID = ("RadComboBox1" + this.DataField);
combo.ShowToggleImage = false;
combo.Skin = "WebBlue";
combo.EnableLoadOnDemand = true;
combo.AutoPostBack = false;
combo.MarkFirstMatch = true;
combo.Height = Unit.Pixel(100);
combo.ItemsRequested += new RadComboBoxItemsRequestedEventHandler(this.combo_ItemsRequested);
combo.SelectedIndexChanged += new RadComboBoxSelectedIndexChangedEventHandler(this.list_SelectedIndexChanged);
//cell.Controls.Clear();
cell.Controls.AddAt(0, combo);
cell.Controls.RemoveAt(1);
}
//RadGrid will call this method when the value should be set to the filtering input control(s)
protected override void SetCurrentFilterValueToControl(TableCell cell)
{
base.SetCurrentFilterValueToControl(cell);
RadComboBox combo = (RadComboBox)cell.Controls[0];
if ((this.CurrentFilterValue != string.Empty))
{
combo.Text = this.CurrentFilterValue;
}
}
//RadGrid will cal this method when the filtering value should be extracted from the filtering input control(s)
protected override string GetCurrentFilterValueFromControl(TableCell cell)
{
RadComboBox combo = (RadComboBox)cell.Controls[0];
return combo.Text;
}
private void combo_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
{
((RadComboBox)o).DataTextField = this.DataField;
((RadComboBox)o).DataValueField = this.DataField;
if (this.UniqueName == "Autore")
{
try
{
((RadComboBox)o).DataSource = MYSOLUTION.DataLayer.GestioneAnomalie.GestioneAnomalieDataProvider.GetAutori(e.Text);
}
catch (Exception ex)
{
throw (ex);
}
}
else if (this.UniqueName == "Note")
{
try
{
((RadComboBox)o).DataSource = MYSOLUTION.DataLayer.GestioneAnomalie.GestioneAnomalieDataProvider.GetNote(e.Text);
}
catch (Exception ex)
{
throw (ex);
}
}
((RadComboBox)o).DataBind();
}
private void list_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
{
GridFilteringItem filterItem = (GridFilteringItem)((RadComboBox)o).NamingContainer;
if ((this.UniqueName == "Index"))
{
//this is filtering for integer column type
filterItem.FireCommandEvent("Filter", new Pair("EqualTo", this.UniqueName));
}
//filtering for string column type
filterItem.FireCommandEvent("Filter", new Pair("Contains", this.UniqueName));
}
RadGrid is in an ASCX file, it is placed in a RadAjaxPanel. A RadAjaxManager is also present down below the RadGrid, outside of the Ajax Panel.
<telerik:RadGrid
ID="RadGridGestioneAnomalie"
runat="server"
AutoGenerateColumns="False"
AllowFilteringByColumn="true"
DataSourceID="LinqDataSourceAnomalie"
GridLines="Both"
Skin="WebBlue"
AllowMultiRowSelection="True"
AllowMultiRowEdit="True"
SortingSettings-SortedBackColor ="AliceBlue"
SortingSettings-SortToolTip ="Ordina in base ai valori di questa colonna"
ShowStatusBar="true"
StatusBarSettings-LoadingText = "Caricamento in corso"
StatusBarSettings-ReadyText = "Gestione Anomalie"
PageSize="50"
PagerStyle-ForeColor="Black"
PagerStyle-Position="TopAndBottom"
PagerStyle-AlwaysVisible="true"
EnableLinqExpressions="true"
oninit="RadGridGestioneAnomalie_Init"
onitemdatabound="RadGridGestioneAnomalie_ItemDataBound"
onitemcommand="RadGridGestioneAnomalie_ItemCommand"
oneditcommand="RadGridGestioneAnomalie_EditCommand"
onitemcreated="RadGridGestioneAnomalie_ItemCreated"
OnSortCommand="RadGridGestioneAnomalie_SortCommand"
OnColumnCreating="RadGridGestioneAnomalie_ColumnCreating"
oninsertcommand="RadGridGestioneAnomalie_InsertCommand"
OnPreRender="RadGridGestioneAnomalie_PreRender"
>
<ExportSettings IgnorePaging="true" OpenInNewWindow="true" FileName="GestioneAnomalie" ExportOnlyData="true">
<Pdf FontType="Subset" PaperSize="Letter" AllowPrinting="true" />
<Excel Format="Html" />
<Csv ColumnDelimiter="Comma" RowDelimiter="NewLine" />
</ExportSettings>
<MasterTableView
GroupLoadMode ="Client"
HierarchyLoadMode="Client"
CurrentResetPageIndexAction="SetPageIndexToFirst"
VirtualItemCount="50"
datakeynames="ID_Anomalia"
datasourceid="LinqDataSourceAnomalie"
CommandItemDisplay="TopAndBottom"
GroupHeaderItemStyle-BackColor="LemonChiffon"
AllowPaging ="true"
AllowCustomSorting = "true"
AllowFilteringByColumn = "true"
AutoGenerateColumns="false"
AllowSorting ="true"
AllowNaturalSort="false"
PagerStyle-Mode="NextPrevNumericAndAdvanced"
PagerStyle-BackColor="LightGray"
PagerStyle-ForeColor="Black"
PagerStyle-Position="TopAndBottom"
Name="Anomalie"
NoMasterRecordsText="Nessuna anomalia da mostrare"
AllowAutomaticDeletes="True"
AllowAutomaticUpdates="True" AllowAutomaticInserts="True"
CanRetrieveAllData="True"
>
In the Page_Load, I pull out every column and later I put my personal dropdownfiltercolumn just for those column that has got particular UniqueName... here there's the code-behind :
protected void Page_Load(object sender, EventArgs e)
{
EnsureUpdatePanelFixups();
codiceProcesso = this.Page.Request.QueryString.Get(URLFactory.Param_ProcessoRilevatore);
if (!(UserRole.isControlloQualita() || UserRole.isRilevatoreDelProcesso(codiceProcesso) || UserRole.isValidatoreDelProcesso(codiceProcesso)))
{
// Per ora disabilito
RadGridGestioneAnomalie.Visible = false;
//RadGridTotaliOperazioni.Visible = false;
}
RadGridGestioneAnomalie.MasterTableView.IsItemInserted = false;
LeggiParametriRicerca();
#region Creazione Filtro DropDown
if (!IsPostBack)
{
_rgSupporto = new List<GridColumn>();
foreach (GridColumn colonna in RadGridGestioneAnomalie.MasterTableView.Columns)
{
_rgSupporto.Add(colonna);
}
RadGridGestioneAnomalie.MasterTableView.Columns.Clear();
if (_rgSupporto.Count > 0)
{
foreach (GridColumn col in _rgSupporto)
{
if ((col.UniqueName == "Autore") || (col.UniqueName == "Note"))
{
DropDownFilter gridColumn = new DropDownFilter();
this.RadGridGestioneAnomalie.MasterTableView.Columns.Add(gridColumn);
gridColumn.DataField = col.HeaderText;
gridColumn.HeaderText = col.HeaderText;
}
else
this.RadGridGestioneAnomalie.MasterTableView.Columns.Add(col);
}
}
}
any help is appreciated
thanks
Giovanni