• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1322
  • Last Modified:

ASP.NET + Custom LinqDataSource + Bind to ListView / GridView

I am doing a custom search based on keywords, location and category. I have built the linq query in the code behind fine. I now want to bind it to a listview but also enable paging on the listview.

How is this done? What event do i use, or is it all done from code behind?

Many thanks.
var searchQuery = from s in db.RecruitmentJobs
                          where s.job_end_date >= DateTime.Now
                          select new 
                          {
                              s.job_title, 
                              s.job_location,
                              s.job_categoryID
                          };
 
 
        if (keywords != "")
            searchQuery = searchQuery.Where(s => s.job_title.Contains(keywords));
 
        if (location != "")
            searchQuery = searchQuery.Where(s => s.job_location.Contains(location));
 
        if (category > 0)
            searchQuery = searchQuery.Where(s => s.job_categoryID.Contains("¬" + category + "¬"));

Open in new window

0
iziizi
Asked:
iziizi
  • 4
  • 2
2 Solutions
 
MaxOvrdrv2Commented:
well, i don't know what a Custom LinqDataSource is... but you can surely do something like this:

GridView.DataSource=searchQuery.Execute

??
0
 
GuitarRichCommented:
you can bind the listview to the linq object - also you can do the paging straight from the link source and implement custom paging in the listview to limit the data being sent over the web. like this
public var GetData(<search parameters>, int pageIndex, int pageSize)
{
var searchQuery = from s in db.RecruitmentJobs
                          where s.job_end_date >= DateTime.Now
                          select new 
                          {
                              s.job_title, 
                              s.job_location,
                              s.job_categoryID
                          };
 
 
        if (keywords != "")
            searchQuery = searchQuery.Where(s => s.job_title.Contains(keywords));
 
        if (location != "")
            searchQuery = searchQuery.Where(s => s.job_location.Contains(location));
 
        if (category > 0)
            searchQuery = searchQuery.Where(s => s.job_categoryID.Contains("¬" + category + "¬"));
 
    return searchQuery.Skip((pageIndex - 1) * pageSize).Take(pageSize);
}
 
// calling code - first page, 10 items per page;
var data = GetData(<seach parameters>, 1, 10);
listView1.DataSource = data;
listView1.DataBind();

Open in new window

0
 
iziiziAuthor Commented:
in order to do the paging as you have done, i would first need to do a count on the records, and create my own page numbers for the user to click wouldnt i?

I read that this isnt neccasay as u can get it to work with the inbuilt paging in listview / datapager.

i read it here:http://weblogs.asp.net/scottgu/archive/2007/09/07/linq-to-sql-part-9-using-a-custom-linq-expression-with-the-lt-asp-linqdatasource-gt-control.aspx

"One of the really cool things to notice above is that paging and sorting still work with our GridView - even though we are using a custom Selecting event to retrieve the data.  This paging and sorting logic happens in the database - which means we are only pulling back the 10 products from the database that we need to display for the current page index in the GridView (making it super efficient)."

just not sure how to implement it.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
GuitarRichCommented:
ok - in that example Scott has used a LinqDataSource on the page with the GridView. In the Selecting event of the LinqDataSource is where scotts linq query is, so you should do the same. You'll need some way of setting the parameters - querystring, session, controls on the form etc...
Then it looks like he has enabled paging in the gridview in the standard way - its interesting, I've not used this method myself.
0
 
iziiziAuthor Commented:
"You'll need some way of setting the parameters - querystring, session, controls on the form etc..."

the params come from QS. the problem i am having is understanding the selecing event - when does the selecting event fire?
0
 
iziiziAuthor Commented:
figured it out. All i was missing was the datasource ID on the listview / gridview doh!
<asp:ListView ID="ListView1" runat="server" DataSourceID="LinqDataSource1">
            
                <ItemTemplate>
                    <tr style="">
                        <td>
                            <asp:Label ID="idLabel" runat="server" Text='<%# Eval("JobTitle") %>' />
                        </td>
                    </tr>
                </ItemTemplate>
                <EmptyDataTemplate>
                    <table runat="server" style="">
                        <tr>
                            <td>
                                No data was returned.</td>
                        </tr>
                    </table>
                </EmptyDataTemplate>
                
            
            <LayoutTemplate>
            
                <table runat="server">
                    <tr runat="server">
                        <td runat="server">
                            <table ID="itemPlaceholderContainer" runat="server" border="0" style="">
                                <tr runat="server" style="">
                                    <th runat="server">
                                        jobt</th>
                                </tr>
                                <tr ID="itemPlaceholder" runat="server">
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr runat="server">
                        <td runat="server" style="">
                        </td>
                    </tr>
                </table>
            
            </LayoutTemplate>
            
                
            </asp:ListView>
            
            <%--<asp:GridView ID="GridView1" runat="server" DataSourceID="LinqDataSource1" AutoGenerateColumns="false">
            <Columns>
            <asp:BoundField DataField="JobTitle" HeaderText="Job Title" />
            </Columns>
            </asp:GridView>--%>
        
            <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
                onselecting="LinqDataSource1_Selecting" TableName="AdPlacements" 
                ContextTypeName="GeneralDataContext">
            </asp:LinqDataSource>
 
//code behind
 
var searchQuery = from s in db.RecruitmentJobs
                          where s.job_end_date >= DateTime.Now
                          select new 
                          {
                              JobTitle = s.job_title,
                              s.job_title, 
                              s.job_location,
                              s.job_categoryID
                          };
 
 
        if (keywords != "")
            searchQuery = searchQuery.Where(s => s.job_title.Contains(keywords));
 
        if (location != "")
            searchQuery = searchQuery.Where(s => s.job_location.Contains(location));
 
        if (category > 0)
            searchQuery = searchQuery.Where(s => s.job_categoryID.Contains("¬" + category + "¬"));
 
        e.Result = searchQuery;

Open in new window

0
 
iziiziAuthor Commented:
allgood
0

Featured Post

Prep for the ITIL® Foundation Certification Exam

December’s Course of the Month is now available! Enroll to learn ITIL® Foundation best practices for delivering IT services effectively and efficiently.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now