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?