Pending Review
Last Updated: 25 Sep 2022 01:59 by Nick
Created on: 25 Sep 2022 01:59
Category: SearchBox
Type: Feature Request
Change Datasource When SearchContext Changes

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.$;
                        "selectedIndexChanged": function (event) {
                            var searchbox = $find("<%=RadSearchBox1.ClientID%>");

                // this is the search context dropdown selectedIndexChanged event handler 
                            var ajaxManager = $find("<%=RadAjaxManager1.ClientID%>");


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
                Case "Landlords"
                    RadSearchBox1.DataSource = sqldatasourcelandlords
                Case "Owners"
                    RadSearchBox1.DataSource = sqldatasourceowners
            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?