Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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

Posted on 2009-05-20
7
Medium Priority
?
1,320 Views
Last Modified: 2013-11-08
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
Comment
Question by:iziizi
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
7 Comments
 
LVL 10

Expert Comment

by:MaxOvrdrv2
ID: 24434973
well, i don't know what a Custom LinqDataSource is... but you can surely do something like this:

GridView.DataSource=searchQuery.Execute

??
0
 
LVL 12

Expert Comment

by:GuitarRich
ID: 24436517
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
 

Author Comment

by:iziizi
ID: 24436681
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
Nothing ever in the clear!

This technical paper will help you implement VMware’s VM encryption as well as implement Veeam encryption which together will achieve the nothing ever in the clear goal. If a bad guy steals VMs, backups or traffic they get nothing.

 
LVL 12

Assisted Solution

by:GuitarRich
GuitarRich earned 400 total points
ID: 24436844
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
 

Author Comment

by:iziizi
ID: 24436990
"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
 

Accepted Solution

by:
iziizi earned 0 total points
ID: 24438963
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
 

Author Comment

by:iziizi
ID: 24497599
allgood
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

International Data Corporation (IDC) prognosticates that before the current the year gets over disbursing on IT framework products to be sent in cloud environs will be $37.1B.
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …

609 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question