与实体框架的 Asp.net GridView 搜索

发布时间: 2017/3/26 4:29:11
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

出现此错误︰

数据源是无效的类型。 它必须是 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);
 }

解决方法 1:

你是绑定的对象作为网格首先会给你而不是集合的对象而数据源期望的集合。如果你不需要绑定 gridview 与单个记录,那么您可以移除的调用 First 方法和调用 tolist () 来获取记录的列表。

如果你需要只有第一个记录,然后您可以使用Enumerable.Take将返回你IEnumerable<TSource>

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

编辑按 OP 的评论

如果您是绑定所有的记录,那么你应该知道知道许多记录你有表中。如果记录是在一千,然后你可以想想分页。

如果记录在几百然后你可以使用相同的方法使用查询没有 where 子句在 Page_Load 事件。

if(!Page.IsPostBack)
{
     JobShopEntities job = new JobShopEntities();
     GridView1.DataSource = (from x in job.JobDescriptions).ToList();
     GridView1.DataBind();
}
官方微信
官方QQ群
31647020