joeharrison714 / MVCGrid.Net

http://mvcgrid.net
MIT License
75 stars 56 forks source link

Empty CSV Export #176

Closed MrDanOak closed 9 months ago

MrDanOak commented 5 years ago

Grid with the below definition epxorts an empty csv with headers only? been bashing my head against a few different things.


    .WithAuthorizationType(AuthorizationType.AllowAnonymous)
    .WithSorting(sorting: true, defaultSortColumn: "ID", defaultSortDirection: SortDirection.Dsc)
    .WithPaging(paging: true, itemsPerPage: 10, allowChangePageSize: true, maxItemsPerPage: 100)
    .AddColumns((GridColumnListBuilder<Migration> cols) =>
    {
        cols.Add("ID")
        .WithValueExpression((Migration migration, GridContext c) => c.UrlHelper.Action("Details", "Migrations", new { id = migration.ID }))
        .WithValueTemplate("<a href='{Value}'>{Model.ID}</a>", false)
        .WithPlainTextValueExpression(migration => migration.ID.ToString())
        .WithSorting(true);
        cols.Add("Application Reference")
        .WithSorting(true)
        .WithValueExpression(migration => migration.ReferenceNumber.ToString());
        cols.Add("Country of Origin")
        .WithValueExpression(migration => migration.CountryOfOrigin.Description);
        cols.Add("Migrant")
        .WithValueExpression(migration => migration.Person.Aliases.Where(a => a.IsPrimary).FirstOrDefault().Forename + " " + migration.Person.Aliases.Where(a => a.IsPrimary).FirstOrDefault().Surname);
        cols.Add("How")
        .WithValueExpression(migration => migration.How);
        cols.Add("Why")
        .WithValueExpression(migration => migration.Why);
        cols.Add("Migration Status")
        .WithSorting(true)
        .WithValueExpression(migration => migration.MigrationStatus.GetDisplayName());
        cols.Add("Assessment Status")
        .WithValueExpression(migration => migration.AssessmentStatus.GetDisplayName());
    })
    .WithRetrieveDataMethod((context) =>
    {
        var options = context.QueryOptions;

        var migrationItems = new MigrationsContext().Migrations;

        var onPage = Convert.ToInt32(options.PageIndex);
        var itemsPerPage = Convert.ToInt32(options.ItemsPerPage);

        var items = (options.SortDirection == SortDirection.Asc ? migrationItems.OrderBy(m => m.ID) : migrationItems.OrderByDescending(m => m.ID)).Skip(onPage * itemsPerPage).Take(itemsPerPage).ToList();

        if (options.SortColumnName == "Migration Status")
        {
            items = (options.SortDirection == SortDirection.Asc ? migrationItems.OrderBy(m => m.MigrationStatus) : migrationItems.OrderByDescending(m => m.MigrationStatus)).Skip(onPage * itemsPerPage).Take(itemsPerPage).ToList();
        }
        else if (options.SortColumnName == "Application Reference")
        {
            items = (options.SortDirection == SortDirection.Asc ? migrationItems.OrderBy(m => m.ReferenceNumber) : migrationItems.OrderByDescending(m => m.ReferenceNumber)).Skip(onPage * itemsPerPage).Take(itemsPerPage).ToList();
        }

        return (new QueryResult<Migration>()
        {
            Items = items,
            TotalRecords = Queryable.Count(migrationItems)
        });
    })
);