Does RadGrid support filtering by multiple selections such as check boxes (see attached screen shot)? If it does, Can someone provide some sample code for that?
1 Answer, 1 is accepted
0
Shinu
Top achievements
Rank 2
answered on 06 Nov 2012, 06:25 AM
Hi,
Please take a look in to the following code for filtering RadGrid using Multi-Selection RadComboBox.
ASPX:
C#:
Please take a look into this code library.
Thanks,
Shinu.
Please take a look in to the following code for filtering RadGrid using Multi-Selection RadComboBox.
ASPX:
<telerik:RadGrid ID="RadGrid1" runat="server" OnPreRender="RadGrid1_PreRender" AutoGenerateColumns="False" OnNeedDataSource="RadGrid1_NeedDataSource" EnableLinqExpressions="false"> <mastertableview editmode="InPlace" allowfilteringbycolumn="true" commanditemdisplay="Top"> <Columns> <telerik:GridBoundColumn DataField="EmployeeID" HeaderText="EmployeeID" SortExpression="EmployeeID" UniqueName="EmployeeID" DataType="System.Int32"> <FilterTemplate> <telerik:RadComboBox ID="RadComboBox1" runat="server" DataSourceID="SqlDataSource1" DataValueField="EmployeeID" DataTextField="EmployeeID" EmptyMessage="All Types" AllowCustomText="true" Width="240px"> <ItemTemplate> <asp:CheckBox runat="server" Checked="true" ID="chk1" onclick="onCheckBoxClick(this)" /> <%# Eval("EmployeeID")%> </ItemTemplate> <FooterTemplate> <asp:Button ID="clrFilters" runat="server" Text="Clear filters" OnClick="clrFilters_Click" /> </FooterTemplate> </telerik:RadComboBox> <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server"> <script type="text/javascript"> function onCheckBoxClick(chk) { var text = "", values = ""; var tableView = $find("<%# ((GridItem)Container).OwnerTableView.ClientID %>"); var combo = $find('<%# ((GridItem)Container).FindControl("RadComboBox1").ClientID %>'); //get the collection of all items var items = combo.get_items(); //enumerate all items for (var i = 0; i < items.get_count(); i++) { var item = items.getItem(i); //get the checkbox element of the current item var chk1 = $get(combo.get_id() + "_i" + i + "_chk1"); if (chk1.checked) { text += item.get_text() + ","; values += item.get_value() + ","; } } //remove the last comma from the string text = removeLastComma(text); values = removeLastComma(values); $find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("EmployeeID," + text); } function removeLastComma(str) { return str.replace(/,$/, ""); } </script> </telerik:RadScriptBlock> </FilterTemplate> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="City" HeaderText="City" SortExpression="City" UniqueName="City"> </telerik:GridBoundColumn> </Columns> </mastertableview> <clientsettings> <Selecting AllowRowSelect="true" /> </clientsettings></telerik:RadGrid><br /><asp:Button ID="clrFilters" runat="server" Text="Clear filters" OnClick="clrFilters_Click" /><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT * FROM [Employees]"></asp:SqlDataSource><telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" DefaultLoadingPanelID="RadAjaxLoadingPanel1" OnAjaxRequest="RadAjaxManager1_AjaxRequest"> <ajaxsettings> <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> </UpdatedControls> </telerik:AjaxSetting> <telerik:AjaxSetting AjaxControlID="clrFilters"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadGrid1" /> </UpdatedControls> </telerik:AjaxSetting> </ajaxsettings></telerik:RadAjaxManager><telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" Skin="Default" />C#:
protected void Page_Load(object sender, EventArgs e){ ViewState["filterRawString"] = null;}protected void RadGrid1_PreRender(object sender, EventArgs e){ if (ViewState["filterRawString"] != null) { foreach (GridFilteringItem item in RadGrid1.MasterTableView.GetItems(GridItemType.FilteringItem)) { RadComboBox combo = (RadComboBox)item.FindControl("RadComboBox1"); foreach (RadComboBoxItem comboItem in combo.Items) { if (ViewState["filterRawString"].ToString().Contains(comboItem.Text.ToString())) { CheckBox chk = (CheckBox)comboItem.FindControl("chk1"); chk.Checked = true; } else { CheckBox chk = (CheckBox)comboItem.FindControl("chk1"); chk.Checked = false; } } } }}protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e){ string str = e.Argument.ToString(); String query = "SELECT EmployeeID, City FROM Employees WHERE EmployeeID = '" + str.Split(',')[1] + "'"; if (str.Split(',')[0] == "EmployeeID") { for (int i = 2; i < str.Split(',').Length; i++) { query = query + " OR EmployeeID='" + str.Split(',')[i] + "'"; } ViewState["filterRawString"] = str; RadGrid1.DataSource = GetDataTable(query); RadGrid1.Rebind(); GridFilteringItem filterItem = RadGrid1.MasterTableView.GetItems(GridItemType.FilteringItem)[0] as GridFilteringItem; RadComboBox combo = (RadComboBox)filterItem.FindControl("RadComboBox1"); RadAjaxManager1.ResponseScripts.Add("$find('" + combo.ClientID + "').showDropDown();"); }}public DataTable GetDataTable(string query){ String ConnString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].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_NeedDataSource(object source, GridNeedDataSourceEventArgs e){ if (ViewState["filterRawString"] == null) RadGrid1.DataSource = GetDataTable("SELECT EmployeeID,City FROM Employees");}protected void clrFilters_Click(object sender, EventArgs e){ foreach (GridColumn column in RadGrid1.MasterTableView.Columns) { column.CurrentFilterFunction = GridKnownFunction.NoFilter; column.CurrentFilterValue = string.Empty; } RadGrid1.MasterTableView.FilterExpression = string.Empty; RadGrid1.MasterTableView.Rebind();}Please take a look into this code library.
Thanks,
Shinu.