Datalist not rendering

Hi again Radzen

I'm having some difficulty rendering items in a DataList, and I'm sure I'm just missing something small. These are the steps I've followed in a Northwind WASM testing project from the Radzen IDE:

  1. In a new empty page, add a DataList component.

  2. Properties > Data > New > GetOrders > Allow paging > Save

  3. See that Count is set to ${getOrdersCount}, Data to ${getOrdersResult}
    image

  4. Open template designer, add Heading component, set Text to ${data.Id.ToString()}

  5. No items on the page in the browser

Inspecting the network request, this is what I see:
https://localhost:5001/odata/AppDb/Orders?$top=10&$skip=0&$count=true

Could you please assist in pointing out what I'm missing?

Thank you!

Hi @damian_s,

Can you post the generated code as well?

Hi @enchev, sure thing:

@page "/another-test"
@layout MainLayout
@inherits RadzenTestWa.Pages.AnotherTestComponent

@using Radzen
@using Radzen.Blazor
@using RadzenTestWa.Models.AppDb
@using Microsoft.AspNetCore.Identity;
@using RadzenTestWa.Models
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize]


<RadzenContent Container="main">
  <ChildContent>
    <RadzenHeading Size="H1" Text="Another test">
    </RadzenHeading>
    <RadzenDataList @ref="datalist0" AllowPaging="true" Count="@getOrdersCount" Data="@getOrdersResult" TItem="RadzenTestWa.Models.AppDb.Order" PageSize="10" LoadData="@Datalist0LoadData">
      <Template Context="radzenTestWaModelsAppDbOrder">
        <RadzenHeading Size="H3" Text="@(radzenTestWaModelsAppDbOrder.Id.ToString())">
        </RadzenHeading>
      </Template>
    </RadzenDataList>
    <RadzenHeading Size="H3" Visible="@(getOrdersResult != null)">
    </RadzenHeading>
  </ChildContent>
</RadzenContent>
using Radzen;
using Radzen.Blazor;
using RadzenTestWa.Models.AppDb;
using Microsoft.AspNetCore.Identity;
using RadzenTestWa.Models;
using RadzenTestWa.Client.Pages;

namespace RadzenTestWa.Pages
{
    public partial class AnotherTestComponent : ComponentBase
    {
        [Parameter(CaptureUnmatchedValues = true)]
        public IReadOnlyDictionary<string, dynamic> Attributes { get; set; }

        public void Reload()
        {
            InvokeAsync(StateHasChanged);
        }

        public void OnPropertyChanged(PropertyChangedEventArgs args)
        {
        }

        [Inject]
        protected IJSRuntime JSRuntime { get; set; }

        [Inject]
        protected NavigationManager UriHelper { get; set; }

        [Inject]
        protected DialogService DialogService { get; set; }

        [Inject]
        protected TooltipService TooltipService { get; set; }

        [Inject]
        protected ContextMenuService ContextMenuService { get; set; }

        [Inject]
        protected NotificationService NotificationService { get; set; }

        [Inject]
        protected SecurityService Security { get; set; }

        [Inject]
        protected AuthenticationStateProvider AuthenticationStateProvider { get; set; }

        [Inject]
        protected AppDbService AppDb { get; set; }
        protected RadzenDataList<RadzenTestWa.Models.AppDb.Order> datalist0;

        IEnumerable<RadzenTestWa.Models.AppDb.Order> _getOrdersResult;
        protected IEnumerable<RadzenTestWa.Models.AppDb.Order> getOrdersResult
        {
            get
            {
                return _getOrdersResult;
            }
            set
            {
                if (!object.Equals(_getOrdersResult, value))
                {
                    var args = new PropertyChangedEventArgs(){ Name = "getOrdersResult", NewValue = value, OldValue = _getOrdersResult };
                    _getOrdersResult = value;
                    OnPropertyChanged(args);
                    Reload();
                }
            }
        }

        int _getOrdersCount;
        protected int getOrdersCount
        {
            get
            {
                return _getOrdersCount;
            }
            set
            {
                if (!object.Equals(_getOrdersCount, value))
                {
                    var args = new PropertyChangedEventArgs(){ Name = "getOrdersCount", NewValue = value, OldValue = _getOrdersCount };
                    _getOrdersCount = value;
                    OnPropertyChanged(args);
                    Reload();
                }
            }
        }

        protected override async System.Threading.Tasks.Task OnInitializedAsync()
        {
            await Security.InitializeAsync(AuthenticationStateProvider);
            if (!Security.IsAuthenticated())
            {
                UriHelper.NavigateTo("Login", true);
            }
        }

        protected async System.Threading.Tasks.Task Datalist0LoadData(dynamic args)
        {
            var appDbGetOrdersResult = await AppDb.GetOrders(top:args.Top, skip:args.Skip, count:args.Top != null && args.Skip != null);
            getOrdersResult = appDbGetOrdersResult.Value.AsODataEnumerable();

            getOrdersCount = appDbGetOrdersResult.Count;
        }
    }
}

Everything looks correct. Can you check for errors in Radzen output window or browser console?

Everything looks good there too.

Hi @damian_s,

I've managed to reproduce the problem - it was caused by LoadData event handler arguments type (generated as dynamic). Fix will be released later today.

That's great news - thank you!

I tried different variations and can report that unselecting Allow paging fails to generate the method to be called on the load event:

Might be related.

Hi @damian_s,

Not related however we've fixed this as well.

Rockstars :sunglasses:

1 Like