Hi,
In my application, I use SignalR to update the Kanban for all other clients connected to SignalR for my app.
When I edit a card on the Kanban (card Dialog edit), I called the SignalR method to display the changes for all other clients on the app.
Those changes are being painted in the database and Kanban Datasource, but the Kanban refresh is not showing those changes for all other clients.
I am using Syncfusion v19.2.0.56.
I have attached images for code reference.
Thank you very much,
Kenney
KanbanHub.cs
public class KanbanHub : Hub
{
public async Task SendMessage()
{
await Clients.All.SendAsync("ReceiveMessage");
}
} |
@code {
public SfKanban<Order> KanbanObj;
private HubConnection hubConnection;
public IEnumerable<Order> KanbanData { get; set; }
OrderContext db = new OrderContext();
protected override async Task OnInitializedAsync()
{
hubConnection = new HubConnectionBuilder()
.WithUrl(NavigationManager.ToAbsoluteUri("/kanbanhub"))
.Build();
hubConnection.On("ReceiveMessage", () =>
{
CallLoadData(); // Fetch updated data from service
StateHasChanged();
});
await hubConnection.StartAsync();
CallLoadData(); // For initial load of Kanban data
}
async Task Send() =>
await hubConnection.SendAsync("SendMessage");
public bool IsConnected =>
hubConnection.State == HubConnectionState.Connected;
public async ValueTask DisposeAsync()
{
if (hubConnection != null)
{
await hubConnection.DisposeAsync();
}
}
private void CallLoadData()
{
Task.Run(async () =>
{
await LoadData();
});
}
protected async Task LoadData()
{
OrderService _craftService = new OrderService();
IEnumerable DataSource = await _craftService.GetOrdersAsync(); // Fetch data from service
KanbanData = DataSource.Cast<Order>();
await Task.Yield();
await InvokeAsync(StateHasChanged);
await KanbanObj.RefreshAsync();
}
private async Task OnActionComplete(ActionEventArgs<Order> args)
{
if (args.RequestType == "cardChange") // Update action
{
IEnumerable<Order> changedData = args.ChangedRecords;
foreach (Order updateAlert in changedData)
{
var data = db.Orders.Where(or => or.EmployeeID == (updateAlert as Order).EmployeeID).FirstOrDefault();
if (data != null)
{
data.ShipCity = (updateAlert as Order).ShipCity;
data.ShipName = (updateAlert as Order).ShipName;
}
db.SaveChangesAsync();
}
if (IsConnected) await Send();
}
}
} |