【问题标题】:Asp.net GridView search with Entity Framework使用实体框架进行 Asp.net GridView 搜索
【发布时间】:2015-07-25 14:03:42
【问题描述】:

我收到此错误:

数据源是无效类型。它必须是 IListSource, IEnumerable 或 IDataSource。

我的代码:

protected void Button1_Click(object sender, EventArgs e)
{
        JobShopEntities job = new JobShopEntities();
        GridView1.DataSource = (from x in job.JobDescriptions where (x.Titlu == TextBox1.Text) select x).First();
        GridView1.DataBind();
}

我搜索了很多解决方案。从这里我得到了这个解决方案。

后端的其余代码以防与错误有关。

 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
 {
        GridViewRow row = GridView1.Rows[e.NewEditIndex];

        int rowId = Convert.ToInt32(row.Cells[1].Text);

        Response.Redirect("~/Administrator/Management/ManageJobs.aspx?id=" + rowId);
 }

【问题讨论】:

    标签: c# asp.net entity-framework gridview


    【解决方案1】:

    您将网格与对象绑定,因为 First 会给您一个对象而不是集合,而 DataSource 需要一个集合。如果您不需要将gridview与单个记录绑定,那么您可以删除First方法的调用并调用ToList()来获取记录列表。

    如果您只需要第一条记录,那么您可以使用Enumerable.Take,它将返回您IEnumerable<TSource>

     GridView1.DataSource = (from x in job.JobDescriptions 
        where (x.Titlu == TextBox1.Text) select x).Take(1);
    

    编辑根据 OP 的 cmets

    如果您绑定了所有记录,那么您应该知道表中有许多记录。如果记录以千为单位,那么您可以考虑分页。

    如果记录是数百个,那么您可以在 Page_Load 事件中使用不带 where 子句的查询来使用相同的方法。

    if(!Page.IsPostBack)
    {
         JobShopEntities job = new JobShopEntities();
         GridView1.DataSource = (from x in job.JobDescriptions).ToList();
         GridView1.DataBind();
    }
    

    【讨论】:

    • 您好,非常感谢您的快速响应。我尝试了两种方法,但出现错误。 DataSource 和 DataSourceID 都在“GridView1”上定义。删除一个定义。
    • 您可能已经在 GridView 标记中提供了 DataSourceID,例如 DataSourceID="Datasource1",并且您还在后面的代码中提供了数据源。从 GridView 标记中删除 DataSourceID,因为 GridView 可以一次在数据源上拥有
    • 是的,你是对的......但是我在我的 gridview 中添加了一个数据源来显示所有记录,并且我想要上面的搜索框来搜索带有标题的记录。
    • 您好,昨天忘记回复了。我修改了一些你的代码来工作。在这个 ""from x in job.JobDescriptions"" 中,我把 select x 放在最后,而不是 .Take(1);我把 ToList().但是您的解决方案对我来说是一个很好的提示。非常感谢。
    猜你喜欢
    • 2014-03-31
    • 2018-11-21
    • 2020-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多