Question

J'ai un gridview dans ma couche d'utilisateur qui utilise une méthode de couche métier comme source de données, et je veux le GridView support pagination et le tri. Quand je suis rentré IEnumerable de la méthode, il ramènera toutes les données. Si j'utilise Prenez / Saut pour ramener seulement une valeur de page, le gridview ne se rend pas compte qu'il ya beaucoup de pages de données.

Lorsque je change le IEnumerable en IQueryable, le DataBind () échoue parce que les données ont déjà été éliminés. Je pense que ce problème a quelque chose à voir avec lorsque la requête en fait l'exécution et il peut avoir à faire avec les filtres que je pose ma candidature à la requête (voir ci-dessous).

Code de Layer utilisateur:

grdSelectedQuestionaires.DataSource = assessment.FilteredAssessmentList(filter);
grdSelectedQuestionaires.DataBind(); <-- Fails - "Cannot access a disposed object"

Couche d'entreprise Code:

public IQueryable<Assessment> FilteredAssessmentList(AssessmentSearchFilter filter)
    {
        using (PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext())
        {
            var rows = (
                    from a in dc.vPAQSummaries
                    select new Assessment()
                    {
                        PAQNumber = a.PAQNumber.Trim(),
                        CustomerID = (int)a.CustomerID,
                        Department = a.Department.Trim(),
                        CustomerName = a.CustomerName.Trim(),
                        DOTNumber = a.DOTNumber.Trim(),
                        OrgName = a.OrgName.Trim(),
                        DateEntered = a.DateEntered,
                        GroupNumber = a.GroupNumber.Trim(),
                        JobTitle = a.JobTitle.Trim(),
                        FileNames = a.FileNames.Trim(),
                        AnalystType = a.AnalystType.ToString(),
                        Incumbents = a.Incumbents,
                    });

            //  Filter by Customer ID
            if (filter.CustomerID > 0)
            {
                rows = rows.Where(r => r.CustomerID == filter.CustomerID);
            }
            else
            {
                rows = rows.Where(r => r.CustomerID != null);
            }

            //  Filter by DOT Number
            if (!string.IsNullOrEmpty(filter.DOTNumberFrom))
            {
                if (string.IsNullOrEmpty(filter.DOTNumberTo))
                {
                    rows = rows.Where(r => r.DOTNumber == filter.DOTNumberFrom);
                }
                else
                {
                    rows = rows.Where(r => r.DOTNumber.CompareTo(filter.DOTNumberFrom) >= 0
                        && r.DOTNumber.CompareTo(filter.DOTNumberTo) <= 0);
                }
            }

            //  Filter by OrgName
            if (!string.IsNullOrEmpty(filter.OrgName))
            {
                rows = rows.Where(r => r.OrgName.StartsWith(filter.OrgName));
            }

            //  Filter by Group
            if (!string.IsNullOrEmpty(filter.GroupNumberFrom))
            {
                if (!string.IsNullOrEmpty(filter.GroupNumberTo))
                {
                    rows = rows.Where(r => r.GroupNumber == filter.GroupNumberFrom);
                }
                else
                {
                    rows = rows.Where(r => r.GroupNumber.CompareTo(filter.GroupNumberFrom) >= 0
                        && r.GroupNumber.CompareTo(filter.GroupNumberTo) <= 0);
                }
            }

            if (filter.Skip > 0)
            {
                rows = rows.Skip(filter.Skip);
            }
            if (filter.Take > 0)
            {
                rows = rows.Take(filter.Take);
            }
            else
            {
                rows = rows.Take(100);
            }

            return rows.Distinct();
        }
    }
}
Était-ce utile?

La solution

Le problème de pagination a été provoquée par l'instruction Using. Changement de ceci:

using (PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext())
{
...
}

à ceci:

PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext();

fait un travail de recherche de personnes. Maintenant, je dois comprendre comment fonctionne le tri.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top