Hi,
I have a very simple dynamically-created filter. The expression value is always empty for a standard DropDownList expression, but works fine with the TextBox; I'm sure it's my own ignorance but I can't find syntax to get the input value and/or set the expression value, which is apparently done in the OnExpressionEvaluated event. The textbox works without any intervention.
I'm new to Telerik so apologies if there is some blatant issue with the code. There is a comment where I believe I'm going wrong.
Thanks,
JD
I have a very simple dynamically-created filter. The expression value is always empty for a standard DropDownList expression, but works fine with the TextBox; I'm sure it's my own ignorance but I can't find syntax to get the input value and/or set the expression value, which is apparently done in the OnExpressionEvaluated event. The textbox works without any intervention.
I'm new to Telerik so apologies if there is some blatant issue with the code. There is a comment where I believe I'm going wrong.
Thanks,
JD
public
class
filterSimpleCtrl : WebControl
{
private
RadFilter _rf =
new
RadFilter();
private
Label _label =
new
Label();
private
RadScriptManager sm =
new
RadScriptManager();
protected
override
void
OnInit(EventArgs e)
{
base
.OnInit(e);
this
.Page.Form.Controls.Add(sm);
this
._label.ID =
"_label"
;
this
._rf.ID =
"_rf"
;
this
._rf.FilterContainerID =
"RadGrid1"
;
this
._rf.ExpressionPreviewPosition = RadFilterExpressionPreviewPosition.Bottom;
this
._rf.ApplyExpressions += _rf_ApplyExpressions;
this
._rf.ExpressionItemCreated += _rf_ExpressionItemCreated;
RadFilterTextFieldEditor rfe2 =
new
RadFilterTextFieldEditor();
rfe2.FieldName =
"City"
;
rfe2.DisplayName =
"City"
;
rfe2.DefaultFilterFunction = RadFilterFunction.Contains;
_rf.FieldEditors.Add(rfe2);
RadFilterDropDownEditor rfe =
new
RadFilterDropDownEditor();
rfe.FieldName =
"CountryCode"
;
rfe.DisplayName =
"Country Code"
;
rfe.DataTextField =
"CountryCode"
;
rfe.DefaultFilterFunction = RadFilterFunction.EqualTo;
_rf.FieldEditors.Add(rfe);
this
.Page.Form.Controls.Add(_rf);
this
.Page.Form.Controls.Add(
new
LiteralControl(
"<br />"
));
this
.Page.Form.Controls.Add(_label);
}
protected
void
_rf_ExpressionItemCreated(
object
sender, RadFilterExpressionItemCreatedEventArgs e)
{
// Populate the RadDropDownList control for every ShipCountry field editor
RadFilterSingleExpressionItem singleItem = e.Item
as
RadFilterSingleExpressionItem;
if
(singleItem !=
null
&& singleItem.FieldName ==
"CountryCode"
&& singleItem.IsSingleValue)
{
RadDropDownList dropDownList = singleItem.InputControl
as
RadDropDownList;
dropDownList.DataSource = GetListData(
"country"
);
dropDownList.DataBind();
}
// Removes the AddGroupExpressionButton for group expression other than the root group
RadFilterGroupExpressionItem groupItem = e.Item
as
RadFilterGroupExpressionItem;
if
(groupItem !=
null
)
{
if
(groupItem.IsRootGroup) groupItem.RemoveButton.Visible =
false
;
else
groupItem.AddGroupExpressionButton.Visible =
false
;
}
}
void
_rf_ApplyExpressions(
object
sender, RadFilterApplyExpressionsEventArgs e)
{
RadFilterSqlQueryProvider queryProvider =
new
RadFilterSqlQueryProvider();
queryProvider.OnExpressionEvaluated =
this
.ExpressionEvaluated;
queryProvider.ProcessGroup(e.ExpressionRoot);
this
._label.Text = queryProvider.Result;
}
private
void
ExpressionEvaluated(RadFilterEvaluationData evaluationData)
{
RadFilterFunction filterFunction = evaluationData.Expression.FilterFunction;
if
(evaluationData.Expression.FieldName ==
"CountryCode"
&&
filterFunction == RadFilterFunction.EqualTo ||
filterFunction == RadFilterFunction.NotEqualTo)
{
//NONE OF THESE WORK
//string value = (evaluationData.Expression as RadFilterContainsFilterExpression).Value;
//string value = (((IRadFilterValueExpression)evaluationData.Expression).Values[0] as RadFilterDropDownEditor).ExtractValues()[0].ToString();
//string value = (((IRadFilterValueExpression)evaluationData.Expression).Values[0] as RadDropDownList).SelectedValue;
RadFilterNonGroupExpression expression =
null
;
RadFilterSqlExpressionEvaluator evaluator = RadFilterSqlExpressionEvaluator.GetEvaluator(evaluationData.Expression.FilterFunction);
expression =
new
RadFilterEqualToFilterExpression<
string
>(
"CountryCode"
) { Value = value };
evaluator.GetEvaluationData(expression).CopyTo(evaluationData);
}
}
private
DataTable GetListData(
string
list)
{
string
query =
""
;
switch
(list)
{
case
"country"
:
query =
"SELECT CountryCode FROM Country"
;
break
;
default
:
break
;
}
string
conString = ConfigurationManager.ConnectionStrings[
"constr"
].ConnectionString;
SqlCommand cmd =
new
SqlCommand(query);
using
(SqlConnection con =
new
SqlConnection(conString))
{
using
(SqlDataAdapter sda =
new
SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using
(DataTable dt =
new
DataTable())
{
sda.Fill(dt);
return
dt;
}
}
}
}
}