Why does calling AsEnumerable () on a DataTable prevent GridView from binding to it?

On my .aspx page, I have a control <asp:GridView runat="server" ID="CustomerGridView">that I link as follows:

public partial class InsertCustomer : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ViewCustomer();
        }
    }

    private void ViewCustomer()
    {
        var manager = new DomainManager();
        var result = manager.FindAll(new Customer());
        this.CustomerGridView.DataSource = result;
        this.CustomerGridView.DataBind();
    }
}

Here is the class DomainManager:

public class DomainManager
{
    readonly StringBuilder _queryBuilder = new StringBuilder();
    private Type _entityType;
    readonly SQLHelper _sqlHelper = new SQLHelper();

    public IEnumerable FindAll<T>(T entity)
    {
        _entityType = entity.GetType();
        var query = string.Format("select * from {0}", _entityType.Name);
        var dt = _sqlHelper.FillDataTable(query);
        return dt.AsEnumerable();
    }
}

The problem is that my grid is not connected correctly. Why not?

+3
source share
1 answer

Try to change

return dt.AsEnumerable(); 

to

return dt.DefaultView;

: a GridView . , List<Customer>, Name Customer. DataTable , DataRow, DataRow Name, GridView.

, ICustomTypeDescriptor. DataRowView, DataRow. dt.DefaultView ( DataView), GridView DataRowView, .

,

this.CustomerGridView.DataSource = dt;

,

this.CustomerGridView.DataSource = dt.AsEnumerable();

.

, DataTable IListSource, GridView " , DefaultView." AsEnumerable() -, IListSource, GridView , DefaultView.

+3

All Articles