Asp.net 使用 Entity Framework 进行 GridView 搜索

Asp.net GridView search with Entity Framework

我收到这个错误:

Data source is an invalid type. It must be either an IListSource, IEnumerable, or 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);
 }

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

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

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

根据 OP

的评论编辑

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

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

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