I want to show list of items asynchronously, I'm doing like below but i'm not sure it is working properly or not. can you guys help me out, is this the proper way?
private List<SuggestedItemsInput> SuggestedItemAsync()
{
OHDWebService OHDService = new OHDWebService();
List<SuggestedItemsInput> suggestedItemsList = OHDService.SaveSuggestedItems(hdnPlainBody.Value, hfdOrderRecordID.Value);
return suggestedItemsList;
}
private async void GetSuggestedItemsFromService()
{
Task<List<SuggestedItemsInput>> task = new Task<List<SuggestedItemsInput>>(SuggestedItemAsync);
task.Start();
List<SuggestedItemsInput> suggestedItems = await task;
ViewState["sItems"] = suggestedItems;
if (suggestedItems != null && suggestedItems.Count > 0)
{
GetSuggestedItems(Request["OrderRecordID"].ToString());
lblInfo.Text = string.Empty;
}
}
Edit: Now I'm using below code it is working and I'm saving and getting data by SaveAndGetSuggestedItem() method. it will take time to save data in database, in the mean time i want to show loading image once it is completed loading image should hide and data should populate in grid-view , I've added code below, but problem is grid-view will load after page refreshed by manually and loading image showing continuously.
/// <summary>
/// Gets the SuggestedItems from API.
/// </summary>
private List<SuggestedItemsInput> SaveAndGetSuggestedItem()
{
try
{
OHDWebService OHDService = new OHDWebService();
return OHDService.SaveSuggestedItems(hdnPlainBody.Value, hfdOrderRecordID.Value);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// Async call to the SuggestedItems.
/// </summary>
private async Task GetSuggestedItemsAsync()
{
try
{
LoadingImg.Visible = true;
List<SuggestedItemsInput> suggestedItems = await Task.Run(() => SaveAndGetSuggestedItemFromKenome());
LoadingImg.Visible = false;
ViewState["sItems"] = suggestedItems;
if (suggestedItems != null && suggestedItems.Count > 0)
{
BindSuggestedItems(hfdOrderRecordID.Value);
lblInfo.Text = string.Empty;
}
}
catch (Exception ex)
{
throw ex;
}
}
Front page(View):
<asp:Panel ID="LoadingImg" runat="server" Visible="false">
<i class="fa fa-spinner fa-pulse fa-3x fa-fw" style="color: darkblue"></i>
<span class="sr-only">Loading...</span><span>Please wait...</span>
</asp:Panel>
<asp:Label ID="lblInfo" runat="server"></asp:Label>
<asp:GridView ID="grdSuggestedItems" runat="server" CellPadding="4" CellSpacing="4" AutoGenerateColumns="false" Width="100%" CssClass="table" HorizontalAlign="Center">
<HeaderStyle HorizontalAlign="Center" BackColor="#8b6f4e" ForeColor="white" />
<Columns>
<asp:BoundField HeaderText="Matched Text" DataField="MessageText" />
<asp:TemplateField HeaderText="ItemId">
<ItemTemplate>
<div>
<span style="font-size: 12px;">
<a target="_blank" style="cursor: pointer" href='<%= ConfigurationManager.AppSettings["InvInquiry"].ToString() %><%#Eval("ItemID") %>'><%#Eval("ItemID") %></a>
</span>
<div style="font-size: 10px;">
<%#Eval("ItemDescription") %>
</div>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="ProductLine" DataField="ProductLine" />
<asp:BoundField HeaderText="Qty" DataField="Qty" />
<asp:BoundField HeaderText="Confidence(%)" DataField="Confidence" />
<asp:BoundField HeaderText="Rank" DataField="Rank" />
</Columns>
<RowStyle HorizontalAlign="Center" />
</asp:GridView>