http://www.trirand.net/demoaspnetmvc.aspx - in the 'ship name' column. It has a nice auto complete filter which I can't see in the RadControls demos, the closest I found were: http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/filteringcombo/defaultcs.aspx
3 Answers, 1 is accepted
0

Shinu
Top achievements
Rank 2
answered on 24 Jul 2012, 04:48 AM
Hello Steve,
RadGrid supports google like filtering. Here is the sample code.
aspx:
C#:
Also take a look at the following demo which implements the same.
Grid / Google-like Filtering
Thanks,
Shinu.
RadGrid supports google like filtering. Here is the sample code.
aspx:
<
telerik:RadGrid
ID
=
"RadGrid1"
AutoGenerateColumns
=
"false"
AllowPaging
=
"true"
AllowSorting
=
"true"
AllowFilteringByColumn
=
"true"
Width
=
"560px"
runat
=
"server"
OnItemCommand
=
"RadGrid1_ItemCommand"
OnNeedDataSource
=
"RadGrid1_NeedDataSource"
oncolumncreating
=
"RadGrid1_ColumnCreating"
>
<
PagerStyle
Mode
=
"NumericPages"
/>
</
telerik:RadGrid
>
DataTable dt;
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!IsPostBack)
{
dt = GetDataTable(
"SELECT Country, City, PostalCode FROM Customers"
);
this
.RadGrid1.MasterTableView.Columns.Clear();
foreach
(DataColumn dataColumn
in
dt.Columns)
{
MyCustomFilteringColumnCS gridColumn =
new
MyCustomFilteringColumnCS();
this
.RadGrid1.MasterTableView.Columns.Add(gridColumn);
gridColumn.DataField = dataColumn.ColumnName;
gridColumn.HeaderText = dataColumn.ColumnName;
}
}
}
protected
void
RadGrid1_NeedDataSource(
object
source, GridNeedDataSourceEventArgs e)
{
dt = GetDataTable(
"SELECT Country, City, PostalCode FROM Customers"
);
this
.RadGrid1.DataSource = dt;
}
protected
void
RadGrid1_ItemCommand(
object
source, GridCommandEventArgs e)
{
if
((e.CommandName ==
"Filter"
))
{
foreach
(GridColumn column
in
e.Item.OwnerTableView.Columns)
{
column.CurrentFilterValue =
string
.Empty;
column.CurrentFilterFunction = GridKnownFunction.NoFilter;
}
}
}
public
static
DataTable GetDataTable(
string
query)
{
string
ConnString = ConfigurationManager.ConnectionStrings[
"NorthwindConnectionString3"
].ConnectionString;
SqlConnection conn =
new
SqlConnection(ConnString);
SqlDataAdapter adapter =
new
SqlDataAdapter();
adapter.SelectCommand =
new
SqlCommand(query, conn);
DataTable myDataTable =
new
DataTable();
conn.Open();
try
{
adapter.Fill(myDataTable);
}
finally
{
conn.Close();
}
return
myDataTable;
}
protected
void
RadGrid1_ColumnCreating(
object
sender, GridColumnCreatingEventArgs e)
{
if
((e.ColumnType ==
typeof
(MyCustomFilteringColumnCS).Name))
{
e.Column =
new
MyCustomFilteringColumnCS();
}
}
}
//class MyCustomFilteringColumnCS
public
class
MyCustomFilteringColumnCS : GridBoundColumn
{
public
static
string
ConnectionString
{
get
{
return
ConfigurationManager.ConnectionStrings[
"NorthwindConnectionString3"
].ConnectionString; }
}
protected
override
void
SetupFilterControls(TableCell cell)
{
base
.SetupFilterControls(cell);
cell.Controls.RemoveAt(0);
RadComboBox combo =
new
RadComboBox();
combo.ID = (
"RadComboBox1"
+
this
.UniqueName);
combo.ShowToggleImage =
false
;
combo.Skin =
"Office2007"
;
combo.EnableLoadOnDemand =
true
;
combo.AutoPostBack =
true
;
combo.MarkFirstMatch =
true
;
combo.Height = Unit.Pixel(100);
combo.ItemsRequested +=
this
.list_ItemsRequested;
combo.SelectedIndexChanged +=
this
.list_SelectedIndexChanged;
cell.Controls.AddAt(0, combo);
cell.Controls.RemoveAt(1);
}
protected
override
void
SetCurrentFilterValueToControl(TableCell cell)
{
base
.SetCurrentFilterValueToControl(cell);
RadComboBox combo = (RadComboBox)cell.Controls[0];
if
((
this
.CurrentFilterValue !=
string
.Empty))
{
combo.Text =
this
.CurrentFilterValue;
}
}
protected
override
string
GetCurrentFilterValueFromControl(TableCell cell)
{
RadComboBox combo = (RadComboBox)cell.Controls[0];
return
combo.Text;
}
private
void
list_ItemsRequested(
object
o, RadComboBoxItemsRequestedEventArgs e)
{
((RadComboBox)o).DataTextField =
this
.DataField;
((RadComboBox)o).DataValueField =
this
.DataField;
((RadComboBox)o).DataSource = GetDataTable(
"SELECT DISTINCT "
+
this
.UniqueName +
" FROM Customers WHERE "
+
this
.UniqueName +
" LIKE '"
+ e.Text +
"%'"
);
((RadComboBox)o).DataBind();
}
private
void
list_SelectedIndexChanged(
object
o, RadComboBoxSelectedIndexChangedEventArgs e)
{
GridFilteringItem filterItem = (GridFilteringItem)((RadComboBox)o).NamingContainer;
if
((
this
.UniqueName ==
"Index"
))
{
filterItem.FireCommandEvent(
"Filter"
,
new
Pair(
"EqualTo"
,
this
.UniqueName));
}
filterItem.FireCommandEvent(
"Filter"
,
new
Pair(
"Contains"
,
this
.UniqueName));
}
public
static
DataTable GetDataTable(
string
query)
{
SqlConnection conn =
new
SqlConnection(ConnectionString);
SqlDataAdapter adapter =
new
SqlDataAdapter();
adapter.SelectCommand =
new
SqlCommand(query, conn);
DataTable myDataTable =
new
DataTable();
conn.Open();
try
{
adapter.Fill(myDataTable);
}
finally
{
conn.Close();
}
return
myDataTable;
}
}
Grid / Google-like Filtering
Thanks,
Shinu.
0

Steve
Top achievements
Rank 1
answered on 24 Jul 2012, 05:51 PM
Hi, can you change the filter to match keywords "contains" rather than "begins with"?
0

Shinu
Top achievements
Rank 2
answered on 25 Jul 2012, 04:31 AM
Hi,
Try setting the filter function as shown below.
C#:
Thanks,
Shinu.
Try setting the filter function as shown below.
C#:
private
void
list_SelectedIndexChanged(
object
o, RadComboBoxSelectedIndexChangedEventArgs e)
{
GridFilteringItem filterItem = (GridFilteringItem)((RadComboBox)o).NamingContainer;
if
((
this
.UniqueName ==
"Index"
))
{
filterItem.FireCommandEvent(
"Filter"
,
new
Pair(
"Contains"
,
this
.UniqueName));
}
}
Thanks,
Shinu.