Domanda

Ho un GridView nel mio livello di utente che utilizza un metodo di livello business come la sua origine dati, e voglio GridView al supporto di paging e l'ordinamento. Quando sono tornato un IEnumerable dal metodo, che riporterà tutti i dati. Se uso Take / Skip per riportare solo valore di una pagina, il GridView non si rende conto che ci sono molte pagine di dati.

Quando cambio l'IEnumerable in un oggetto IQueryable, il DataBind () non riesce perché i dati sono già stati eliminati. Penso che questo problema ha a che fare con quando la query esegue effettivamente e può avere a che fare con i filtri Mi candido alla query (vedi sotto).

User Layer Codice:

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

Business strato di codice:

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();
        }
    }
}
È stato utile?

Soluzione

Il problema di paging è stato causato dal privacy Usando. La modifica di questa:

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

a questo:

PAQcDataLayerDataContext dc = new PAQcDataLayerDataContext();

reso il lavoro di paging. Ora devo capire come l'ordinamento funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top