I want to be able to let a user choose "Landlords", "Tenants", "Owners" and search for a name. The data for the search box comes from different tables.
<asp:SqlDataSource ID="SqlDataSourceTenants" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectConnectionString %>"
SelectCommand="SELECT Id,TenantEntityName as EntityName FROM TenantEntities"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSourceLandlords" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectConnectionString %>"
SelectCommand="SELECT Id, LandlordEntityName as EntityName FROM LandlordEntities"></asp:SqlDataSource>
<asp:SqlDataSource ID="SqlDataSourceOwners" runat="server"
ConnectionString="<%$ ConnectionStrings:ProjectConnectionString %>"
SelectCommand="SELECT Id,OwnerEntityName As EntityName FROM OwnerEntities"></asp:SqlDataSource>
I would like to set the DatasourceId on the RadSearchBox to one of the above when the SearchContext changes. I have worked out how to get the selected searchcontext text via an Ajax Request.
function OnClientLoad(sender, args) {
var context = sender.get_searchContext();
var $ = $telerik.$;
$(context).on({
"selectedIndexChanged": function (event) {
var searchbox = $find("<%=RadSearchBox1.ClientID%>");
// this is the search context dropdown selectedIndexChanged event handler
var ajaxManager = $find("<%=RadAjaxManager1.ClientID%>");
ajaxManager.ajaxRequest(context.get_selectedItem().get_text());
}
});
}
I cannot work out how to change the datasource at runtime (I get datasource not found when I run the following code).
Protected Sub RadAjaxManager1_OnAjaxRequest(sender As Object, e As AjaxRequestEventArgs)
if not isnothing(radsearchbox1.datasource)
select Case e.Argument
Case "Tenants"
RadSearchBox1.DataSource = sqldatasourcetenants
RadSearchBox1.databind
Case "Landlords"
RadSearchBox1.DataSource = sqldatasourcelandlords
RadSearchBox1.databind
Case "Owners"
RadSearchBox1.DataSource = sqldatasourceowners
RadSearchBox1.databind
End Select
End If
End Sub
In the OnSearch Event I just need to get the type of entity (which I could get from checking the Id of the bound datasource) and the Id of the entity:
Protected Sub RadSearchBox1_OnSearch(sender As Object, e As SearchBoxEventArgs)
If e.DataItem IsNot Nothing Then
Dim dataItem = DirectCast(e.DataItem, Dictionary(Of String, Object))
Dim thisId As String = dataItem("Id").ToString()
Dim thisEntityName As String = dataItem("EntityName").ToString()
' Lookup in database and redirect to the relevant data view / edit page
End If
End Sub
Surely this is a common request and deserves consideration?
Perhaps a simple feature to permit high speed searches in RadSearch is to allow custom SQL Select strings in lieu of direct connect to a SQL Datasource (unless there is a way to accomplish the following in a SQL Datasource)
I have FreeText and text optimization configured/added in SQL Server. This provides a tremendous speed boost for searching strings. Therefore, somehow in the RadSearch box allow searches such as:
SELECT * FROM myTable WHERE contains(myTextIndexedColumn,'this is fast')
SELECT * FROM myTable WHERE FreeText(myTextIndexedColumn,'this is so much faster!')
When the SearchBox is on the right side of the screen and the dropdown width is larger than the SearchBox width, the dropdown goes outside the viewport: Actual: https://www.screencast.com/t/4SoNcRCj Expected/fixed: https://www.screencast.com/t/smfPgy767M Workaround: <script> function OnClientLoad(sender, args) { sender._dropDown.on({ "reflowed": sender._onReflowed }, sender) } Telerik.Web.UI.RadSearchBox.prototype._onReflowed = function () { var that = this; var $animationContainer = $(that._dropDown._animationContainer); if (that._enableScreenBoundaryDetection) { var availableSpace = that._dropDown._getAvailableSpace(); var tableWidth = $(that._innerWrapElement).outerWidth(); var dropDownWidth = $animationContainer.outerWidth(); var overflow = dropDownWidth - (tableWidth + availableSpace.right); if (overflow > 0) { var left = parseInt($animationContainer.css("left"), 10); var newLeft = Math.max(left - overflow, left - (dropDownWidth - tableWidth)); $animationContainer.css("left", newLeft); } } } </script> <telerik:RadSearchBox runat="server" ID="RadSearchBox1" DataTextField="ShipName" OnClientLoad="OnClientLoad" DropDownSettings-Width="500px" DataValueField="OrderID"> </telerik:RadSearchBox>
Can I advice to extend SearchBox or RadAutoCompleteBox control to write free text and open list box only if I digit a custom char like '@'? I am tinking a control like Post textbox in Facebook or in Twitter where I can digit text and, if I digit '@' char opens a list with all friends o mine. If you want extend more, it will be wonderful if you can associate more than one custom char and each custom char is associated to a different Data source. Example: - '@' to get products - '#' to get Customers - and so on... This SearchBox must can be multiline too. Thanks, Francesco.
Please implement WAI-ARIA support in RadSearchBox with and without a Search Context. It needs the same type of logic added as the AutoComplete and ComboBox control so that JAWS can speak and navigate the list items properly. It looks like there was a little started because it renders an ARIA live region for status, but never writes to it from what I can tell. I know this document lists the current controls that support ARIA - http://docs.telerik.com/devtools/aspnet-ajax/controls/wai-aria-support-and-screen-readers Thanks, Mike
Validation is not implemented for RadSearchBox. You can find attached an example that emulates validation of a search box through a dummy textbox and validators attached to that dummy textbox.
Hi, in SearchBox, when the field being searched is a date, we would like to be able to search via the 'smart parsing engine' of DateInput.
ADD: Property to SearchBox, which displays text if no records are returned.
- Add Filter="None" (as discussed here: http://www.telerik.com/community/forums/aspnet-ajax/search-box/how-can-i-set-filter-to-none.aspx).