Hello,
I am using Telerik RadControls for ASP.NET AJAX 2009.01.0527.20.
I have a RadGrid that contains a column called Status. I am replacing the text ("1", "2", or "3") in the RadGrid1_ItemDataBound() event with a blank ("") and setting the CssClass to have the appropriate background image (i.e., background: url('images/1_green_light.gif') no-repeat center;)). This is working fine and I have the proper image (green, yellow, or red) for the status. I was replacing the text with "<a href="..."><img src="green.gif"...></a>" but this worked fine in IE but not always in Firefox. Sometimes the image would show and sometimes not. So I opted for the background image technique I described above which works fine in both browsers.
Now I want to create a custom filter for this column. I have a RadComboBox with 3 checkboxes and the three images in the dropdown and I can check or uncheck the status(es) I want to filter on. I have the RadComboBox setup visually just fine using a custom filter template.
The problem is that I don't know how to apply the filter in the code-behind. What event should I hook into and how do I apply the filter?
Here is the code for my RadGrid:
<telerik:RadGrid runat="server" ID="RadGrid1" AllowFilteringByColumn="true" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Height="100%" Width="100%" PageSize="10" OnDataBound="RadGrid1_DataBound" OnItemDataBound="RadGrid1_ItemDataBound" OnNeedDataSource="RadGrid1_NeedDataSource" OnPreRender="RadGrid1_PreRender" OnItemCommand="RadGrid1_ItemCommand" > <ClientSettings EnableRowHoverStyle="true"> <Resizing AllowColumnResize="true" ClipCellContentOnResize="true" EnableRealTimeResize="true" /> <Selecting AllowRowSelect="true" /> <Scrolling AllowScroll="true" UseStaticHeaders="true" /> </ClientSettings> <MasterTableView AllowPaging="true" TableLayout="Fixed"> <Columns> <telerik:GridBoundColumn DataField="Status" AllowFiltering="true" FilterControlWidth="32px" HeaderText="Status" SortExpression="Status" UniqueName="Status"> <HeaderStyle Width="56px" /> <ItemStyle HorizontalAlign="Center" /> <FilterTemplate> <telerik:RadComboBox runat="server" ID="RadComboBox1" HighlightTemplatedItems="true" Width="32"> <Items> <telerik:RadComboBoxItem Text="" Count="1" Info="All needed updates installed" Image="images/1_green_light.gif" /> <telerik:RadComboBoxItem Text="" Count="2" Info="Some updates pending install or unknown" Image="images/2_yellow_light.gif" /> <telerik:RadComboBoxItem Text="" Count="3" Info="Some updates failed" Image="images/3_red_light.gif" /> </Items> <ItemTemplate> <div onclick="StopPropagation(event)" class="combo-item-template"> <asp:CheckBox runat="server" ID="chk1" Checked="true" onclick="onCheckBoxClick(this)"/> <asp:Label runat="server" ID="Label1" AssociatedControlID="chk1"> <span class="NoWrap"> <img id="img<%# DataBinder.Eval(Container, "Attributes['Count']") %>" src="<%# DataBinder.Eval(Container, "Attributes['Image']") %>" alt="<%# DataBinder.Eval(Container, "Attributes['Info']") %>" /> <%# DataBinder.Eval(Container, "Attributes['Info']")%></span></asp:Label> </div> </ItemTemplate> </telerik:RadComboBox> <telerik:RadScriptBlock ID="RadScriptBlock1" runat="server"> <script type="text/javascript" language="javascript"> function onCheckBoxClick(chk) { var combo = $find('<%# ((GridItem)Container).FindControl("RadComboBox1").ClientID %>'); var text = ""; var values = ""; // Get the collection of all items. var items = combo.get_items(); // Enumerate all items. for (var i = 0; i < items.get_count(); i++) { // Get the checkbox element of the current item. var chk1 = $get(combo.get_id() + "_i" + i + "_chk1"); if (chk1.checked) { var item = items.getItem(i); var info = item.get_attributes().getAttribute("Info"); text += info + ","; values += item.get_value() + ","; } } // Remove the last comma from the string. text = removeLastComma(text); values = removeLastComma(values); $find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("Status," + text ); } // This method removes the ending comma from a string. function removeLastComma(str) { return str.replace(/, $/, ""); } function StopPropagation(e) { // Cancel bubbling. e.cancelBubble = true; if (e.stopPropagation) { e.stopPropagation(); } } </script> </telerik:RadScriptBlock> </FilterTemplate> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DNSName" AllowFiltering="true" FilterControlWidth="150px" HeaderText="Computer Name" Resizable="true" SortExpression="DNSName" UniqueName="DNSName"> <HeaderStyle Width="190px" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="IPAddress" AllowFiltering="true" FilterControlWidth="60px" HeaderText="IP Address" SortExpression="IPAddressNumeric" UniqueName="IPAddress"> <HeaderStyle Width="88px" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CountInstalled" AllowFiltering="true" FilterControlWidth="34px" HeaderText="Installed" SortExpression="CountInstalled" UniqueName="CountInstalled"> <HeaderStyle HorizontalAlign="Center" Width="66px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CountNeeded" AllowFiltering="true" FilterControlWidth="34px" HeaderText="Needed" SortExpression="CountNeeded" UniqueName="CountNeeded"> <HeaderStyle HorizontalAlign="Center" Width="63px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CountNotNeeded" AllowFiltering="true" FilterControlWidth="34px" HeaderText="Not Needed" SortExpression="CountNotNeeded" UniqueName="CountNotNeeded" > <HeaderStyle HorizontalAlign="Center" Width="70px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CountFailed" AllowFiltering="true" FilterControlWidth="34px" HeaderText="Failed" SortExpression="CountFailed" UniqueName="CountFailed"> <HeaderStyle HorizontalAlign="Center" Width="56px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="CountUnknown" AllowFiltering="true" FilterControlWidth="34" HeaderText="Unknown" SortExpression="CountUnknown" UniqueName="CountUnknown"> <HeaderStyle HorizontalAlign="Center" Width="72px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="DaysAgo" AllowFiltering="true" FilterControlWidth="70px" HeaderText="Last Contact" SortExpression="DaysAgoNumeric" UniqueName="DaysAgo"> <HeaderStyle HorizontalAlign="Center" Width="90px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="ResponsiblePerson" AllowFiltering="true" FilterControlWidth="50px" HeaderText="PID" SortExpression="ResponsiblePerson" UniqueName="ResponsiblePerson"> <HeaderStyle Width="70px" /> </telerik:GridBoundColumn> <telerik:GridBoundColumn DataField="IsActive" AllowFiltering="true" FilterControlWidth="50px" HeaderText="State" SortExpression="IsActive" UniqueName="IsActive"> <HeaderStyle HorizontalAlign="Center" Width="75px" /> <ItemStyle HorizontalAlign="Center" /> </telerik:GridBoundColumn> <telerik:GridButtonColumn ButtonType="PushButton" ButtonCssClass="TimeoutButton" CommandName="Timeout" HeaderText="Timeout" SortExpression="StatusButtonText" Text="Timeout" UniqueName="Timeout"> <HeaderStyle Width="70px" /> <ItemStyle Font-Names="Tahoma, Verdana, Sans_Serif;" Font-Size="X-Small" HorizontalAlign="Center" /> </telerik:GridButtonColumn> <telerik:GridBoundColumn DataField="SUSClientId" UniqueName="SUSClientId" Visible="false" /> </Columns> </MasterTableView> <PagerStyle Mode="NextPrevAndNumeric" /> </telerik:RadGrid> Thanks in advance for any help you can provide.
Randall Price
