|
@*Throws exception*@ <SfDropDownList TValue="string" TItem="CustomItem" Placeholder="Select Custom
Item" Query="@(new Query().AddParams("some", "param"))" AllowFiltering="true" @bind-Value="@(SelecteItem2.Id)" FloatLabelType="FloatLabelType.Always"> <SfDataManager Adaptor="Adaptors.CustomAdaptor" AdaptorInstance="@typeof(CustomAdaptor)">SfDataManager>
<DropDownListFieldSettings Text="Name" Value="Id">DropDownListFieldSettings> SfDropDownList> <SfDropDownList TValue="string" TItem="CustomItem" Placeholder="Select Custom
Item" AllowFiltering="true" @bind-Value="@(SelecteItem2.Id)" FloatLabelType="FloatLabelType.Always">
<SfDataManager Adaptor="Adaptors.CustomAdaptor" AdaptorInstance="@typeof(CustomAdaptor)">SfDataManager>
<DropDownListFieldSettings Text="Name" Value="Id">DropDownListFieldSettings> SfDropDownList> @*Does not initialize to the selected value because the datasource limits output to 5 but how do I let the adaptor know I need the selected value in the list of items on initial read?*@ <SfDropDownList TValue="string" TItem="CustomItem" Placeholder="Select Custom
Item" AllowFiltering="true" @bind-Value="@(SelecteItem7.Id)" FloatLabelType="FloatLabelType.Always">
<SfDataManager Adaptor="Adaptors.CustomAdaptor" AdaptorInstance="@typeof(CustomAdaptor)">SfDataManager>
<DropDownListFieldSettings Text="Name" Value="Id">DropDownListFieldSettings> SfDropDownList> @code {
CustomItem SelecteItem2 = new CustomItem { Id = "2", Name = "2 Default" };
CustomItem SelecteItem7 = new CustomItem { Id = "7", Name = "7 Default"};
public class CustomItem
{ public string Id { get; set; } public string Name { get; set; }
}
public class CustomAdaptor : DataAdaptor
{ CustomItem[] Items = new CustomItem[] { new CustomItem { Id = "1", Name = "Item 1" }, new CustomItem { Id = "2", Name = "Item 2" }, new CustomItem { Id = "3", Name = "Item 3" }, new CustomItem { Id = "4", Name = "Item 4" }, new CustomItem { Id = "5", Name = "Item 5" }, new CustomItem { Id = "6", Name = "Item 6" }, new CustomItem { Id = "7", Name = "Item 7" } }; public override object Read(DataManagerRequest dataManagerRequest, string key = null) { try { var req = (dataManagerRequest == null) ? "null" : Newtonsoft.Json.JsonConvert.SerializeObject(dataManagerRequest); System.Diagnostics.Debug.WriteLine("Reading custom adaptor. Key is " + key + ", req: " + req); int count = 5; if (dataManagerRequest.Take > 0)
count = Math.Min(5, dataManagerRequest.Take); //Simulate data limit var items = Items.Take(count); var value =
dataManagerRequest?.Where?.FirstOrDefault()?.value?.ToString(); if (value != null) items = items.Where(i =>
i.Name.StartsWith(value)); if
(dataManagerRequest.RequiresCounts) return new DataResult() { Result = items, Count = Items.Count() }; else return items; } catch(Exception e) { System.Diagnostics.Debug.WriteLine("Exception: " +
e.GetExceptionDetail()); return null; } } public override async Task<object> InsertAsync(DataManager dataManager, object value, string key) { return value; } public override async Task<object> RemoveAsync(DataManager dataManager, object value, string keyField, string key) { return value; } public override async Task<object> UpdateAsync(DataManager dataManager, object value, string keyField, string key) { return value; }
} } |
The exception:
Uncaught (in promise) Error: System.ArgumentNullException: Value cannot be null.