I´m rather new in using Radcontrols. I have a Radgrid with OnNeedDatasource binding beacuse it has parameters only available after the Grid is rendered. Until then the Grid is not visible. After binding the datasource it becames visible.
The Grid has filtering on all columns, all of them GridDataBound. Four of the columns have custom filtering with RadGrigDropDownEditor as defined in Telerik samples.
The four dropdowns are created on page_load if not postback with four diferent datasources. OnFilterCration implements them.
Everything is working fine but I have a litle problem: The DropDowns are showing all the items bound by the respective table loaded with the definition and what I need is to show only the items contained in the Grid datasource...
I´ve tried OnItemDatabound, wich seemed to be the point in the Grid lifecycle to bind the grid data to the dropdown, but I can´t get it.
For instance, I have a dataset bound to the grid with sales for two custumer types and when I open the dropdown to select the client type it shows all the client types defined in the aplication. I would like to show only those two types.
I enclose the meaning part of the code:
ASPX:
<
telerik:RadAjaxManager
runat
=
"server"
ID
=
"RadAjaxManager1"
DefaultLoadingPanelID
=
"RadAjaxLoadingPanel1"
>
<
AjaxSettings
>
<
telerik:AjaxSetting
AjaxControlID
=
"FiltroClientes"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"FiltroClientes"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"ApplyButton"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"CliGrandeza"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
<
telerik:AjaxSetting
AjaxControlID
=
"CliGrandeza"
>
<
UpdatedControls
>
<
telerik:AjaxUpdatedControl
ControlID
=
"CliGrandeza"
/>
</
UpdatedControls
>
</
telerik:AjaxSetting
>
</
AjaxSettings
>
<
ClientEvents
OnRequestStart
=
"onRequestStart"
/>
</
telerik:RadAjaxManager
>
<
telerik:RadAjaxLoadingPanel
runat
=
"server"
ID
=
"RadAjaxLoadingPanel1"
Skin
=
"Default"
/>
<
telerik:RadWindow
ID
=
"RadWindow1"
runat
=
"server"
Behaviors
=
"Move,Close,Resize"
Title
=
"Filtragem da informação:"
Modal
=
"true"
Width
=
"500"
Height
=
"350"
>
<
ContentTemplate
>
<
telerik:RadFilter
runat
=
"server"
ID
=
"FiltroClientes"
FilterContainerID
=
"CliGrandeza"
ShowApplyButton
=
"false"
OnFieldEditorCreating
=
"FiltroClientes_FieldEditorCreating"
Style
=
"margin: 10px 0 0 10px"
>
</
telerik:RadFilter
>
<
asp:Panel
ID
=
"FilterButtonPanel"
runat
=
"server"
Style
=
"margin: 10px 0 0 10px; font-size: medium"
>
<
asp:LinkButton
runat
=
"server"
ID
=
"ApplyButton"
OnClick
=
"ApplyButton_Click"
Text
=
"Aplicar filtro"
OnClientClick
=
"hideFilterBuilderDialog()"
/>
</
asp:Panel
>
</
ContentTemplate
>
</
telerik:RadWindow
>
<
telerik:RadGrid
ID
=
"CliGrandeza"
runat
=
"server"
AutoGenerateColumns
=
"False"
PageSize
=
"20"
CssClass
=
"BaixaGrid"
GridLines
=
"None"
AllowPaging
=
"True"
AllowSorting
=
"True"
OnNeedDataSource
=
"CliGrandeza_NeedDataSource"
AllowFilteringByColumn
=
"True"
ShowGroupPanel
=
"True"
EnableHeaderContextMenu
=
"True"
EnableLinqExpressions
=
"False"
OnPreRender
=
"CliGrandeza_PreRender"
OnItemDataBound
=
"CliGrandeza_OnItemDataBound"
ShowFooter
=
"True"
CellSpacing
=
"0"
ShowStatusBar
=
"True"
Width
=
"955px"
OnItemCommand
=
"CliGrandeza_ItemCommand"
>
<
GroupingSettings
CaseSensitive
=
"false"
ShowUnGroupButton
=
"True"
RetainGroupFootersVisibility
=
"true"
/>
<
MasterTableView
DataKeyNames
=
"NumCli"
IsFilterItemExpanded
=
"false"
Width
=
"100%"
ShowGroupFooter
=
"true"
CommandItemDisplay
=
"Top"
AllowMultiColumnSorting
=
"True"
AllowFilteringByColumn
=
"true"
NoMasterRecordsText
=
"Não há informação que corresponda à seleção pretendida"
>
<
EditFormSettings
>
<
EditColumn
FilterControlAltText
=
"Filter EditCommandColumn column"
/>
</
EditFormSettings
>
<
PagerStyle
Mode
=
"NextPrev"
/>
<
HeaderStyle
Font-Bold
=
"true"
/>
<
FooterStyle
Font-Size
=
"Smaller"
Font-Italic
=
"true"
Font-Bold
=
"true"
/>
<
CommandItemSettings
ShowAddNewRecordButton
=
"False"
ShowExportToCsvButton
=
"True"
ShowExportToExcelButton
=
"True"
ShowExportToPdfButton
=
"False"
ShowExportToWordButton
=
"True"
>
</
CommandItemSettings
>
<
RowIndicatorColumn
Visible
=
"False"
>
</
RowIndicatorColumn
>
<
ExpandCollapseColumn
Visible
=
"True"
FilterControlAltText
=
"Filter ExpandColumn column"
>
</
ExpandCollapseColumn
>
<
Columns
>
<
telerik:GridBoundColumn
HtmlEncode
=
"true"
DataField
=
"NumCli"
HeaderText
=
"Cliente"
ReadOnly
=
"True"
SortExpression
=
"NumCli"
UniqueName
=
"NumCli"
Aggregate
=
"Count"
FooterText
=
"Clientes: "
FilterControlAltText
=
"Filter NumCli column"
>
<
FooterStyle
HorizontalAlign
=
"Left"
Width
=
"90px"
/>
<
HeaderStyle
HorizontalAlign
=
"Left"
Width
=
"90px"
Wrap
=
"False"
/>
<
ItemStyle
Font-Size
=
"Smaller"
Width
=
"90px"
Wrap
=
"False"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HtmlEncode
=
"true"
DataField
=
"Nome"
HeaderText
=
"Nome"
ReadOnly
=
"True"
SortExpression
=
"Nome"
UniqueName
=
"Nome"
DataFormatString="<nobr>{0}</
nobr
>"
FilterControlAltText="Filter Nome column">
<
FooterStyle
HorizontalAlign
=
"Left"
Width
=
"470px"
/>
<
HeaderStyle
HorizontalAlign
=
"Center"
Width
=
"470px"
Wrap
=
"False"
/>
<
ItemStyle
Font-Size
=
"Smaller"
Wrap
=
"False"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HtmlEncode
=
"true"
DataField
=
"Localidade"
HeaderText
=
"Localidade"
ReadOnly
=
"True"
SortExpression
=
"Localidade"
UniqueName
=
"Localidade"
DataFormatString="<nobr>{0}</
nobr
>"
FilterControlAltText="Filter Localidade column">
<
FooterStyle
HorizontalAlign
=
"Left"
Width
=
"170px"
/>
<
HeaderStyle
HorizontalAlign
=
"Center"
Width
=
"170px"
Wrap
=
"False"
/>
<
ItemStyle
Font-Size
=
"Smaller"
Wrap
=
"False"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
HtmlEncode
=
"true"
DataField
=
"Tcliente"
HeaderText
=
"Tipo Cliente"
ReadOnly
=
"True"
UniqueName
=
"Tcliente"
Visible
=
"False"
>
</
telerik:GridBoundColumn
>
…..
<
telerik:GridCalculatedColumn
Aggregate
=
"Sum"
HeaderText
=
"Ano-2"
UniqueName
=
"TotalAnoPen"
DataType
=
"System.Double"
DataFields
=
"Facturas2, Creditos2"
Expression
=
"ISNULL({0},0)+ISNULL({1},0)"
DataFormatString="<nobr>{0:c}</
nobr
>"
FooterText="Total Ano-2: "
SortExpression="TotalAnoPen">
<
FooterStyle
HorizontalAlign
=
"Right"
Width
=
"85px"
/>
<
HeaderStyle
HorizontalAlign
=
"Right"
Width
=
"85px"
Wrap
=
"False"
/>
<
ItemStyle
Font-Size
=
"Smaller"
HorizontalAlign
=
"Right"
Wrap
=
"False"
/>
</
telerik:GridCalculatedColumn
>
</
Columns
>
</
MasterTableView
>
<
GroupingSettings
CaseSensitive
=
"False"
ShowUngroupButton
=
"true"
/>
<
ExportSettings
FileName
=
"Clientes"
HideStructureColumns
=
"true"
ExportOnlyData
=
"true"
IgnorePaging
=
"True"
OpenInNewWindow
=
"true"
>
<
Csv
ColumnDelimiter
=
"Tab"
RowDelimiter
=
"NewLine"
FileExtension
=
"TXT"
EncloseDataWithQuotes
=
"true"
/>
<
Excel
FileExtension
=
"xls"
Format
=
"Html"
/>
</
ExportSettings
>
<
ClientSettings
AllowColumnsReorder
=
"True"
ReorderColumnsOnClient
=
"True"
EnableRowHoverStyle
=
"false"
AllowDragToGroup
=
"True"
>
<
Selecting
AllowRowSelect
=
"True"
CellSelectionMode
=
"None"
EnableDragToSelectRows
=
"False"
/>
<
Scrolling
AllowScroll
=
"True"
UseStaticHeaders
=
"True"
SaveScrollPosition
=
"true"
ScrollHeight
=
"500px"
/>
<
Resizing
EnableRealTimeResize
=
"True"
ResizeGridOnColumnResize
=
"True"
AllowColumnResize
=
"True"
AllowResizeToFit
=
"True"
/>
<
Animation
AllowColumnReorderAnimation
=
"True"
/>
</
ClientSettings
>
<
FilterMenu
EnableImageSprites
=
"False"
/>
</
telerik:RadGrid
>
<
telerik:RadCodeBlock
ID
=
"RadCodeBlock1"
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
<!--
function pageLoad()
{
var filter = $find("<%=FiltroClientes.ClientID %>");
var menu = filter.get_contextMenu();
menu.add_showing(FilterMenuShowing);
}
function FilterMenuShowing(sender, args)
{
var filter = $find("<%=FiltroClientes.ClientID %>");
var currentExpandedItem = sender.get_attributes()._data.ItemHierarchyIndex;
var fieldName = filter._expressionItems[currentExpandedItem];
var allFields = filter._dataFields;
if (fieldName == "Tcliente" || fieldName == "TDistrito" || fieldName == "TVolta" || fieldName == "TZona")
{
for (var i = 0, j = allFields.length; i <
j
; i++)
{
if (allFields[i].FieldName == fieldName)
{
sender.findItemByValue("StartsWith").set_visible(false);
sender.findItemByValue("EndsWith").set_visible(false);
sender.findItemByValue("GreaterThan").set_visible(false);
sender.findItemByValue("GreaterThanOrEqualTo").set_visible(false);
sender.findItemByValue("LessThan").set_visible(false);
sender.findItemByValue("LessThanOrEqualTo").set_visible(false);
sender.findItemByValue("Contains").set_visible(false);
sender.findItemByValue("DoesNotContain").set_visible(false);
sender.findItemByValue("Between").set_visible(false);
sender.findItemByValue("NotBetween").set_visible(false);
}
}
}
}
function openFilterBuilderDialog()
{
$find('<%=RadWindow1.ClientID %>').show();
}
function hideFilterBuilderDialog()
{
$find('<%=RadWindow1.ClientID %>').close();
}
function OnHeaderMenuItemClicked(sender, args)
{
if (args.get_item().get_value() == "FilterBuilder")
{
openFilterBuilderDialog();
}
}
function onPanelBarItemClicked(sender, args)
{
if (args.get_item().get_commandName() == "OpenRadFilter")
{
openFilterBuilderDialog();
}
}
function onRequestStart(sender, args)
{
if (args.get_eventTarget().indexOf("ExportToExcelButton") >= 0 ||
args.get_eventTarget().indexOf("ExportToWordButton") >= 0 ||
args.get_eventTarget().indexOf("ExportToPdfButton") >= 0 ||
args.get_eventTarget().indexOf("ExportToCsvButton") >= 0)
{
args.set_enableAjax(false);
}
}
-->
</
script
>
C#:
public partial class VeMapCliGrandeza : System.Web.UI.Page
{
DisPPweb.dal dados = new DisPPweb.dal();
DateTime dataFim = DateTime.Now;
DateTime dataIni = IniciaDatas();
protected void CliGrandeza_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
CliGrandeza.DataSource = dados.DSvendas3Anos(Session["Grupo"].ToString(), dataIni, dataFim);
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataIniBox.SelectedDate = dataIni;
DataFimBox.SelectedDate = dataFim;
ConfirmaDatasBtn.Enabled = true;
CliGrandeza.Visible = false;
RadToolBar1.Visible = false;
RadFilterDropDownEditor dropDownTipoCliente = new RadFilterDropDownEditor();
FiltroClientes.FieldEditors.Add(dropDownTipoCliente);
dropDownTipoCliente.FieldName = "Tcliente";
dropDownTipoCliente.DisplayName = "Tipo de cliente";
dropDownTipoCliente.DataTextField = "Tcliente";
dropDownTipoCliente.DataValueField = "Tcliente";
dropDownTipoCliente.DataSource = dados.GetDataTable("SELECT DISTINCT Texto AS Tcliente FROM dbo.TiposCliente").DefaultView.ToTable(true, "Tcliente");
RadFilterDropDownEditor dropDownDistrito = new RadFilterDropDownEditor();
FiltroClientes.FieldEditors.Add(dropDownDistrito);
dropDownDistrito.FieldName = "TDistrito";
dropDownDistrito.DisplayName = "Distrito";
dropDownDistrito.DataTextField = "TDistrito";
dropDownDistrito.DataValueField = "TDistrito";
dropDownDistrito.DataSource = dados.GetDataTable("SELECT DISTINCT Texto AS TDistrito FROM dbo.Distritos").DefaultView.ToTable(true, "TDistrito");
RadFilterDropDownEditor dropDownZona = new RadFilterDropDownEditor();
FiltroClientes.FieldEditors.Add(dropDownZona);
dropDownZona.FieldName = "TZona";
dropDownZona.DisplayName = "Zona";
dropDownZona.DataTextField = "TZona";
dropDownZona.DataValueField = "TZona";
dropDownZona.DataSource = dados.GetDataTable("SELECT DISTINCT Texto AS TZona FROM dbo.Zonas").DefaultView.ToTable(true, "TZona");
RadFilterDropDownEditor dropDownVolta = new RadFilterDropDownEditor();
FiltroClientes.FieldEditors.Add(dropDownVolta);
dropDownVolta.FieldName = "TVolta";
dropDownVolta.DisplayName = "Volta";
dropDownVolta.DataTextField = "TVolta";
dropDownVolta.DataValueField = "TVolta";
dropDownVolta.DataSource = dados.GetDataTable("SELECT DISTINCT Texto AS TVolta FROM dbo.Voltas").DefaultView.ToTable(true, "TVolta");
}
}
protected void FiltroClientes_FieldEditorCreating(object sender, RadFilterFieldEditorCreatingEventArgs e)
{
if (e.EditorType == "RadFilterDropDownEditor")
{
e.Editor = new RadFilterDropDownEditor();
}
}
protected void ApplyButton_Click(object sender, EventArgs e)
{
FiltroClientes.FireApplyCommand();
}