FetchData.razor 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. @page "/fetchdata"
  2. @inject HttpClient Http
  3. @using AntDesign.TableModels
  4. <h1>Weather forecast</h1>
  5. <p>This component demonstrates fetching data from the server.</p>
  6. @if (forecasts == null)
  7. {
  8. <p><em>Loading...</em></p>
  9. }
  10. else
  11. {
  12. <Table @ref="table"
  13. TItem="WeatherForecast"
  14. DataSource="@forecasts"
  15. Total="_total"
  16. @bind-PageIndex="_pageIndex"
  17. @bind-PageSize="_pageSize"
  18. @bind-SelectedRows="selectedRows"
  19. OnChange="OnChange">
  20. <Selection Key="@(context.Id.ToString())" />
  21. <AntDesign.Column @bind-Field="@context.Id" Sortable />
  22. <AntDesign.Column @bind-Field="@context.Date" Format="yyyy-MM-dd" Sortable />
  23. <AntDesign.Column @bind-Field="@context.TemperatureC" Sortable />
  24. <AntDesign.Column Title="Temp. (F)" Field="@context.TemperatureF" />
  25. <AntDesign.Column @bind-Field="@context.Summary" Sortable Filterable />
  26. <ActionColumn>
  27. <Space>
  28. <SpaceItem><Button Danger OnClick="()=>Delete(context.Id)">Delete</Button></SpaceItem>
  29. </Space>
  30. </ActionColumn>
  31. </Table>
  32. }
  33. @using System.Text.Json;
  34. @code {
  35. private WeatherForecast[] forecasts;
  36. IEnumerable<WeatherForecast> selectedRows;
  37. ITable table;
  38. int _pageIndex = 1;
  39. int _pageSize = 10;
  40. int _total = 0;
  41. protected override async Task OnInitializedAsync()
  42. {
  43. forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
  44. }
  45. private static readonly string[] Summaries = new[]
  46. {
  47. "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
  48. };
  49. public async Task OnChange(QueryModel<WeatherForecast> queryModel)
  50. {
  51. Console.WriteLine(JsonSerializer.Serialize(queryModel));
  52. }
  53. public Task<WeatherForecast[]> GetForecastAsync(int pageIndex, int pageSize)
  54. {
  55. var rng = new Random();
  56. return Task.FromResult(Enumerable.Range((pageIndex - 1) * pageSize + 1, pageSize).Select(index =>
  57. {
  58. var temperatureC = rng.Next(-20, 55);
  59. return new WeatherForecast
  60. {
  61. Id = index,
  62. Date = DateTime.Now.AddDays(index),
  63. TemperatureC = temperatureC,
  64. Summary = Summaries[rng.Next(Summaries.Length)]
  65. };
  66. }).ToArray());
  67. }
  68. public void RemoveSelection(int id)
  69. {
  70. var selected = selectedRows.Where(x => x.Id != id);
  71. selectedRows = selected;
  72. }
  73. private void Delete(int id)
  74. {
  75. forecasts = forecasts.Where(x => x.Id != id).ToArray();
  76. _total = forecasts.Length;
  77. }
  78. public class WeatherForecast
  79. {
  80. public int Id { get; set; }
  81. public DateTime Date { get; set; }
  82. public int TemperatureC { get; set; }
  83. public string Summary { get; set; }
  84. public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
  85. }
  86. }