protected void btnShow_Click(object sender, EventArgs e)
{
var query = from b in db.Books
group b by b.BookName into g
select new
{
BookName = g.Key,
NoOfBooks = g.Count()
};
foreach (var d in query)
{
Response.Write("BookName = " + d.BookName + " -- " + d.NoOfBooks + "<br />");
}
//Working fine up to here, display all the books with number of books. But from here it gives error.
rptBooks.DataSource = query;
rptBooks.DataBind();
foreach (Control c in rptBooks.Controls)
{
RepeaterItem item = (RepeaterItem)c;
if (item.ItemType == ListItemType.Item)
{
Label NumberOfBooks = (Label)item.FindControl("NumberOfBooks");
NumberOfBooks.Text = NoOfBooks.ToString();
}
}
}
I want to databind the repeater. Any helps will be appreciated.
And then you can directly return a IEnumerable from your LINQ query:
Repeater1.DataSource = from b in db.Books
group b by b.BookName into g
select new
{
BookName = g.Key,
NumberOfBooks= g.Count()
};
Repeater1.DataBind();
esmerman
Member
24 Points
73 Posts
Databind Linq Query results to a repeater
Dec 01, 2012 03:03 PM|LINK
Hi,
I have Books table and i want to display number ıf books for each bookname property.
<asp:Button ID="btnShow" runat="server" Text="Button" OnClick="btnShow_Click" /> <asp:Repeater id="rptBooks" ItemType="Library.Models.Book" runat="server"> <HeaderTemplate> <tr> <th>Book Name</th> <th>Number of Books</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td> <asp:Label ID="lblBookName" runat="server" Text='<%# Item.BookName %>' /> </td> <td> <asp:Label ID="NumberOfBooks" runat="server" Text="" /> </td> </tr> </ItemTemplate> </asp:Repeater>code-behind ;
protected void btnShow_Click(object sender, EventArgs e) { var query = from b in db.Books group b by b.BookName into g select new { BookName = g.Key, NoOfBooks = g.Count() }; foreach (var d in query) { Response.Write("BookName = " + d.BookName + " -- " + d.NoOfBooks + "<br />"); } //Working fine up to here, display all the books with number of books. But from here it gives error. rptBooks.DataSource = query; rptBooks.DataBind(); foreach (Control c in rptBooks.Controls) { RepeaterItem item = (RepeaterItem)c; if (item.ItemType == ListItemType.Item) { Label NumberOfBooks = (Label)item.FindControl("NumberOfBooks"); NumberOfBooks.Text = NoOfBooks.ToString(); } } }I want to databind the repeater. Any helps will be appreciated.
thaicarrot
Contributor
5431 Points
1507 Posts
Re: Databind Linq Query results to a repeater
Dec 01, 2012 10:30 PM|LINK
rptBooks.DataSource = queryTolist();
Weera
Decker Dong ...
All-Star
118619 Points
18779 Posts
Re: Databind Linq Query results to a repeater
Dec 02, 2012 03:52 AM|LINK
Hello,
First I'd like to say that if you wanna do binding, you can just use Eval or Bind. So you cannot use Label directly:
<asp:Repeater id="rptBooks" ItemType="Library.Models.Book" runat="server"> <HeaderTemplate> <tr> <th>Book Name</th> <th>Number of Books</th> </tr> </HeaderTemplate> <ItemTemplate> <tr> <td> <%#Eval("BookName")%> </td> <td> <%#Eval("NumberOfBooks")%> </td> </tr> </ItemTemplate> </asp:Repeater>And then you can directly return a IEnumerable from your LINQ query:
Repeater1.DataSource = from b in db.Books group b by b.BookName into g select new { BookName = g.Key, NumberOfBooks= g.Count() }; Repeater1.DataBind();esmerman
Member
24 Points
73 Posts
Re: Databind Linq Query results to a repeater
Dec 02, 2012 06:04 PM|LINK
Thank you very much. It is working now.