Ошибка привязки DataAdapter-> DataSet-> LINQ-> ASP.Net DataGrid - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть следующий код:

using (SqlConnection cn = new SqlConnection(Connection.Instance.ConnectionString))
{
    // Open the connection
    using (SqlCommand cmd = new SqlCommand())
    {
        try
        {
            cmd.Connection = cn;

            cmd.CommandText = "Select Customers.CustomerID, Addresses.AddressCode, Addresses.FirstName, Addresses.LastName, Addresses.Address1, Addresses.City, Addresses.State, " +
            "Addresses.Zip, Addresses.Home AS HomePhone, Addresses.Phone AS WorkPhone, Addresses.EmailAddress  From Customers " +
            "LEFT OUTER JOIN Addresses ON Addresses.ID=Customers.AddressID " +
            "Where CustomerType IN ('HomeOwner', 'Home Owner') AND Customers.ResellerID=@ResellerID ";

            cmd.Parameters.AddWithValue("@ResellerID", base.UserID);

            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet dsCustomer = new DataSet();
            da.Fill(dsCustomer);

            var customers = from c in dsCustomer.Tables[0].AsEnumerable().AsQueryable()
                            where c.Field<string>("CustomerID") == txtSearchCriteria.Text
                            select c;

            dgCustomers.CurrentPageIndex = 0;

            dgCustomers.DataSource = customers;
            dgCustomers.DataBind();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message + e.StackTrace);
        }
        finally
        {
            if ((cn != null) && (cn.State != ConnectionState.Closed))
                cn.Close();
        }
    }
}

Что дает мне ошибку

AllowCustomPaging must be true and VirtualItemCount must be set for a DataGrid with ID 'dgCustomers' when AllowPaging is set to true and the selected data source does not implement ICollection.   at System.Web.UI.WebControls.DataGrid.CreateControlHierarchy(Boolean useDataSource)

Как мне преобразовать этот запрос LINQ, чтобы он мог быть разрешен?

Примечание. Это упрощенная версия того, что я пытаюсь сделать.Я знаю, что в этом примере я мог бы просто изменить инструкцию SQL, включив в нее «And CustomerID = @ CustomerID», и полностью обойти LINQ.Но, по большому счету, я не могу этого сделать.

1 Ответ

2 голосов
/ 14 сентября 2011

Сообщение об ошибке ясно, вам нужно реализовать логику подкачки, чтобы воспользоваться преимуществами подкачки. Кстати, чтобы заставить ваш код работать, просто используйте ICollection в качестве источника данных, изменив эту строку:

dgCustomers.DataSource = customers.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...