Hi all,
I am applying Combobox filter for Radgrid like
http://demos.telerik.com/aspnet-ajax/grid/examples/programming/filtertemplate/defaultcs.aspx
But I would like to do more than that.
Let's say, Course column has
+ CS123
+ CS124
+ CS890
+ BM123
+ BM124
If user chooses CS123 from Combobox, of course, it will filter data has CS123 only.
Beside that, I would like add another function which allows user inputs data for filtering.
For example, user input "123" and press Enter
It will filter data includes "123", the result should be "CS123", and "BM123"
That means user can have 2 options:
+ Choose course from dropdown list
+ Or input data and press Enter (work like "Contains" function)
Thanks,
Andy.
I am applying Combobox filter for Radgrid like
http://demos.telerik.com/aspnet-ajax/grid/examples/programming/filtertemplate/defaultcs.aspx
But I would like to do more than that.
Let's say, Course column has
+ CS123
+ CS124
+ CS890
+ BM123
+ BM124
If user chooses CS123 from Combobox, of course, it will filter data has CS123 only.
Beside that, I would like add another function which allows user inputs data for filtering.
For example, user input "123" and press Enter
It will filter data includes "123", the result should be "CS123", and "BM123"
That means user can have 2 options:
+ Choose course from dropdown list
+ Or input data and press Enter (work like "Contains" function)
Thanks,
Andy.
1 Answer, 1 is accepted
0

Elliott
Top achievements
Rank 2
answered on 02 Aug 2011, 06:05 PM
three combo boxes, all of which AND together
<
tr
>
<
td
style
=
"width: 74px; height: 23px;"
>
<
asp:LinkButton
ID
=
"lnkAll"
OnClick
=
"lnkAll_Click"
Font-Bold
=
"False"
Font-Names
=
"Arial"
Font-Size
=
"8pt"
Font-Underline
=
"True"
ForeColor
=
"#0000C0"
Text
=
"All Records"
Width
=
"67px"
runat
=
"server"
/>
</
td
>
<
td
style
=
"width: 141px; height: 23px;"
><
span
style
=
"font-size: 8pt; color: #0000c0; font-family: Arial"
>Ship Date</
span
>
<
telerik:RadComboBox
ID
=
"cmbShipDate"
Width
=
"86px"
Font-Names
=
"Arial"
Font-Size
=
"8pt"
ForeColor
=
"#0000C0"
OnSelectedIndexChanged
=
"cmbShipDate_SelectedIndexChanged"
AutoPostBack
=
"True"
runat
=
"server"
/>
</
td
>
<
td
style
=
"width: 189px; height: 23px;"
>
<
span
style
=
"font-size: 8pt; color: #0000cc; font-family: Arial"
>Department</
span
>
<
telerik:RadComboBox
ID
=
"cmbDepart"
Width
=
"123px"
Font-Names
=
"Arial"
Font-Size
=
"8pt"
ForeColor
=
"#0000C0"
DataValueField
=
"DepartmentNumber"
DataTextField
=
"DepartmentDescription"
OnSelectedIndexChanged
=
"cmbDepart_SelectedIndexChanged"
AutoPostBack
=
"True"
runat
=
"server"
/>
</
td
>
<
td
style
=
"width: 118px; height: 23px;"
>
<
span
style
=
"font-size: 8pt; color: #0000cc; font-family: Arial"
>Store #</
span
>
<
telerik:RadComboBox
ID
=
"cmbStores"
Width
=
"76px"
Font-Names
=
"Arial"
Font-Size
=
"8pt"
ForeColor
=
"#0000C0"
OnSelectedIndexChanged
=
"cmbStores_SelectedIndexChanged"
AutoPostBack
=
"True"
runat
=
"server"
/>
</
td
>
</
tr
>
.....
<
telerik:RadGrid
ID
=
"rgEditOrder"
OnNeedDataSource
=
"rgEditOrder_NeedDataSource"
OnItemCommand
=
"rgEditOrder_ItemCommand"
OnItemCreated
=
"rgEditOrder_ItemCreated"
ShowFooter
=
"True"
runat
=
"server"
Skin
=
"Sunset"
>
<
GroupingSettings
CaseSensitive
=
"false"
/>
<
MasterTableView
DataKeyNames
=
"OrderSeq"
AutoGenerateColumns
=
"false"
AllowSorting
=
"true"
AllowPaging
=
"true"
AllowFilteringByColumn
=
"False"
EditMode
=
"InPlace"
>
<
Columns
>
<
telerik:GridBoundColumn
UniqueName
=
"StoreNumber"
DataField
=
"StoreNumber"
HeaderText
=
"Store #"
DataFormatString
=
"{0:#####}"
DataType
=
"System.Int32"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"40px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"BoothNumber"
DataField
=
"BoothNumber"
HeaderText
=
"Booth #"
DataFormatString
=
"{0:#####}"
DataType
=
"System.Int32"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"40px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"ItemID"
DataField
=
"ItemID"
HeaderText
=
"Item"
DataType
=
"System.Double"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"40px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"ItemDescription"
DataField
=
"ItemDescription"
HeaderText
=
"Description"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"100px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridDateTimeColumn
UniqueName
=
"ShipDate"
DataField
=
"ShipDate"
PickerType
=
"DatePicker"
HeaderText
=
"Ship Date"
DataFormatString
=
"{0:d}"
DataType
=
"System.DateTime"
>
<
HeaderStyle
Width
=
"60px"
/>
</
telerik:GridDateTimeColumn
>
<
telerik:GridTemplateColumn
UniqueName
=
"Qty"
HeaderText
=
"Cases"
DataField
=
"Qty"
DataType
=
"System.Int32"
Aggregate
=
"Sum"
>
<
ItemTemplate
>
<
asp:Label
ID
=
"lblQty"
Text='<%# Bind("Qty") %>' Width="40px" runat="server" />
</
ItemTemplate
>
<
EditItemTemplate
>
<
telerik:RadNumericTextBox
ID
=
"rntbQty"
Value='<%# Eval("Qty") %>' OnTextChanged="rntbQty_TextChanged" AutoPostBack="True" Width="40px" runat="server">
<
NumberFormat
DecimalDigits
=
"0"
/>
</
telerik:RadNumericTextBox
>
</
EditItemTemplate
>
<
HeaderStyle
Width
=
"40px"
/>
</
telerik:GridTemplateColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"NetCost"
DataField
=
"NetCost"
HeaderText
=
"Net Cost"
DataFormatString
=
"{0:C2}"
DataType
=
"System.Double"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"50px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"ItemTotal"
DataField
=
"ItemTotal"
HeaderText
=
"Item Total"
DataFormatString
=
"{0:C2}"
DataType
=
"System.Double"
Aggregate
=
"Sum"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"50px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"PageNumber"
DataField
=
"PageNumber"
HeaderText
=
"Page"
DataFormatString
=
"{0:#####}"
DataType
=
"System.Int32"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"40px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"VendorNumber"
DataField
=
"VendorNumber"
HeaderText
=
"Vendor"
DataFormatString
=
"{0:#####}"
DataType
=
"System.Int32"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"40px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"DepartmentNumber"
DataField
=
"DepartmentNumber"
HeaderText
=
"Depart"
DataFormatString
=
"{0:##}"
DataType
=
"System.Int32"
Aggregate
=
"None"
ReadOnly
=
"True"
>
<
HeaderStyle
Width
=
"30px"
/>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"OrderSeq"
DataField
=
"OrderSeq"
DataType
=
"System.Int64"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
<
telerik:GridBoundColumn
UniqueName
=
"MinQty"
DataField
=
"MinQty"
DataType
=
"System.Int32"
Visible
=
"false"
>
</
telerik:GridBoundColumn
>
</
Columns
>
</
MasterTableView
>
<
ClientSettings
>
<
ClientEvents
OnRowDblClick
=
"RowDblClick"
/>
<
ClientEvents
OnRowClick
=
"RowClick"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!
this
.IsPostBack)
{
.....
FillComboBoxes();
}
private
void
FillComboBoxes()
{
RadComboBoxItem rcbItem;
int
i;
DateTime ShipDate;
DataSet dsOrder =
new
DataSet();
WsOrderSystem wsOrder =
new
WsOrderSystem();
dsOrder = wsOrder.GetOnlineOrder(Convert.ToDouble(txtStoreHidden.Value), txtChain.Value);
//populate stores
DataView dv =
new
DataView(dsOrder.Tables[0]);
dv = dsOrder.Tables[0].DefaultView;
dv.Sort =
"StoreNumber"
;
// create data table of unique store numbers
// in the data view taken from the dataset of order items
DataTable dtStores = dv.ToTable(
true
,
"StoreNumber"
);
rcbItem =
new
RadComboBoxItem(
"All"
);
cmbStores.Items.Add(rcbItem);
for
(i = 0; i < dtStores.Rows.Count; i++)
{
rcbItem =
new
RadComboBoxItem(dtStores.Rows[i][0].ToString());
cmbStores.Items.Add(rcbItem);
}
//populate department
// create table of unique department numbers and department descriptions
// in the data view taken from the dataset of order items
dtStores = dv.ToTable(
true
,
"DepartmentNumber"
,
"DepartmentDescription"
);
cmbDepart.DataSource = dtStores;
cmbDepart.DataValueField = dtStores.Columns[0].ColumnName;
cmbDepart.DataTextField = dtStores.Columns[1].ColumnName;
cmbDepart.DataBind();
rcbItem =
new
RadComboBoxItem(
"All"
);
cmbDepart.Items.Add(rcbItem);
cmbDepart.SelectedIndex = cmbDepart.Items.Count - 1;
//populate ship dates
dv.Sort =
"ShipDate"
;
// create data table of unique ship dates in the view
// taken from the dataset of order items
dtStores = dv.ToTable(
true
, (
"ShipDate"
));
rcbItem =
new
RadComboBoxItem(
"All"
);
cmbShipDate.Items.Add(rcbItem);
for
(i = 0; i < dtStores.Rows.Count; i++)
{
ShipDate = Convert.ToDateTime(dtStores.Rows[i][0]);
rcbItem =
new
RadComboBoxItem(ShipDate.ToShortDateString());
//cmbShipDate.Items.Add(Convert.ToDateTime(dtStores.Rows[i][0].ToString()).ToShortDateString());
cmbShipDate.Items.Add(rcbItem);
}
}
....
protected
void
lnkAll_Click(
object
sender, EventArgs e)
{
cmbShipDate.SelectedIndex = 0;
cmbDepart.SelectedIndex = cmbDepart.Items.Count - 1;
cmbStores.SelectedIndex = 0;
rgEditOrder.MasterTableView.FilterExpression =
string
.Empty;
rgEditOrder.Rebind();
}
protected
void
cmbShipDate_SelectedIndexChanged(
object
o, RadComboBoxSelectedIndexChangedEventArgs e)
{
string
filterExpression;
filterExpression = RemoveFilter(
"ShipDate"
);
rgEditOrder.MasterTableView.FilterExpression = filterExpression;
if
(cmbShipDate.SelectedItem.Text ==
"All"
)
filterExpression =
string
.Empty;
else
filterExpression =
"([ShipDate] = '"
+ cmbShipDate.SelectedItem.Text +
"')"
;
rgEditOrder.MasterTableView.FilterExpression = AppendFilterExpression(filterExpression);
rgEditOrder.EditIndexes.Clear();
ClearOutItemData();
rgEditOrder.MasterTableView.Rebind();
}
protected
void
cmbDepart_SelectedIndexChanged(
object
o, RadComboBoxSelectedIndexChangedEventArgs e)
{
string
filterExpression;
filterExpression = RemoveFilter(
"DepartmentNumber"
);
rgEditOrder.MasterTableView.FilterExpression = filterExpression;
if
(cmbDepart.SelectedItem.Text ==
"All"
)
filterExpression =
string
.Empty;
else
filterExpression =
"([DepartmentNumber] = '"
+ cmbDepart.SelectedValue.ToString() +
"')"
;
rgEditOrder.MasterTableView.FilterExpression = AppendFilterExpression(filterExpression);
rgEditOrder.EditIndexes.Clear();
ClearOutItemData();
rgEditOrder.MasterTableView.Rebind();
}
protected
void
cmbStores_SelectedIndexChanged(
object
o, RadComboBoxSelectedIndexChangedEventArgs e)
{
string
filterExpression;
filterExpression = RemoveFilter(
"StoreNumber"
);
rgEditOrder.MasterTableView.FilterExpression = filterExpression;
if
(cmbStores.SelectedItem.Text ==
"All"
)
filterExpression =
string
.Empty;
else
filterExpression =
"([StoreNumber] = '"
+ cmbStores.SelectedItem.Text +
"')"
;
rgEditOrder.MasterTableView.FilterExpression = AppendFilterExpression(filterExpression);
rgEditOrder.EditIndexes.Clear();
ClearOutItemData();
rgEditOrder.MasterTableView.Rebind();
}
private
string
AppendFilterExpression(
string
filterExpression)
{
StringBuilder sb;
sb =
new
StringBuilder(rgEditOrder.MasterTableView.FilterExpression);
if
(filterExpression ==
string
.Empty)
return
sb.ToString();
if
(sb.ToString() !=
string
.Empty)
{
sb.Append(
" AND "
);
}
sb.Append(filterExpression);
return
sb.ToString();
}
private
string
RemoveFilter(
string
columnName)
{
string
filterExpression;
string
[] filterArray;
string
charac =
"&"
;
char
[] amper = charac.ToCharArray();
StringBuilder sb;
int
i;
sb =
new
StringBuilder(
""
);
filterExpression = rgEditOrder.MasterTableView.FilterExpression;
filterExpression = filterExpression.Replace(
" AND "
, charac);
filterArray = filterExpression.Split(amper, 3);
for
(i=0; i < filterArray.Length;i++)
{
if
(filterArray[i].IndexOf(columnName) == -1)
{
if
(sb.Length > 0)
{
sb.Append(charac);
}
sb.Append(filterArray[i]);
}
}
filterExpression = sb.ToString();
filterExpression = filterExpression.Replace(charac,
" AND "
);
return
filterExpression;
}