How to use the ObjectDataSource as a DataSource, simple example


I thought I’d give an example on how to use the ObjectDataSource in a webpage.


A typical example could be listing states etc. This is fairly static data so it may be unnecessary to query a database for each request.


However, in this example we’ll use the Authors and their Books as an example.


 


This example will use and ObjectDataSource as a DataSource. The object will be returned by projecting Authors and Books into a new class via a LINQ query.


I use LINQ to Objects here but a database connection could be used as well.


 


So, let’s get down to it.


 


– Create a new WebSite, using Location: Filesystem works fine.


– Right click the added App_Code folder, Add New Item -> Class, name it BookShop.cs and replace the code with this.


 


using System;


using System.Collections.Generic;


using System.Linq;


using System.Web;


 


public class BookShop


{


    List<Author> Authors = new List<Author>();


    List<Book> Books = new List<Book>();


 


    public BookShop()


    {


        CreateBooksAndAuthors();


    }


 


    // This will return all Authors to be used by the dropdown.


    public List<Author> GetAuthors()


    {


        return Authors;


    }


 


    // Constructs a new list of BookAuthorItem for provided authorId and returns this to be used by the GridView.


    public List<BookAuthorItem> GetBooksByAuthorId(string authorId)


    {


        var q = from b in Books


                where b.AuthorId.Equals(authorId)


                select new BookAuthorItem


                {


                    BookId = b.BookId,


                    BookName = b.BookName,


                    AuthorName = Authors.First(x => x.AuthorId.Equals(authorId)).AuthorName,


                    AuthorAlias = Authors.First(x => x.AuthorId.Equals(authorId)).AuthorAlias


                };


 


        return q.ToList();


    }


    public class Author


    {


        public string AuthorId { get; set; }


        public string AuthorName { get; set; }


        public string AuthorAlias { get; set; }


    }


    public class Book


    {


        public string BookId { get; set; }


        public string BookName { get; set; }


        public string AuthorId { get; set; }


    }


    // We will project the query result into this class and return it to the calling client.


    public class BookAuthorItem


    {


        public string BookId { get; set; }


        public string BookName { get; set; }


        public string AuthorName { get; set; }


        public string AuthorAlias { get; set; }


    }


    private void CreateBooksAndAuthors()


    {


        // Create some books and authors.


        Authors.Add(new Author { AuthorId = “1”, AuthorName = “Steve Stevenson”, AuthorAlias = “The great Steve” });


        Authors.Add(new Author { AuthorId = “2”, AuthorName = “Tom Tomson”, AuthorAlias = “T.T.” });


        Authors.Add(new Author { AuthorId = “3”, AuthorName = “Eric Ericson”, AuthorAlias = “The Swede” });


        Authors.Add(new Author { AuthorId = “4”, AuthorName = “Paul Paulson” });


 


        Books.Add(new Book { BookId = “1”, BookName = “The great book”, AuthorId = “1” });


        Books.Add(new Book { BookId = “2”, BookName = “Once upon a time”, AuthorId = “1” });


        Books.Add(new Book { BookId = “3”, BookName = “Learning is doing”, AuthorId = “2” });


        Books.Add(new Book { BookId = “4”, BookName = “The not so great book”, AuthorId = “3” });


        Books.Add(new Book { BookId = “5”, BookName = “Summer is good”, AuthorId = “3” });


        Books.Add(new Book { BookId = “6”, BookName = “Ah, you again!”, AuthorId = “4” });


        Books.Add(new Book { BookId = “7”, BookName = “Book about cats”, AuthorId = “4” });


        Books.Add(new Book { BookId = “8”, BookName = “My story”, AuthorId = “4” });


    }


}


 


– Now on the Default.aspx page, drop a DropDownList from the toolbox onto it.


– Select “Choose Data Source…”.


– Select “<New Data Source>” from the “Select a datasource” dropdown.


– Select Object in the “Choose a Data Source Type” dialog, and then OK.


– Select BookShop in the “Choose a Business” dialog, and then Next.


– Select “GetAuthors” from the “Choose a method” dropdown, and then Finish.


– Select AuthorName as the data field to display in the DropDownList, select AuthorId as the datafield for the value of the DropDownList, and OK.


– Select the “Enable AutoPostback” checkbox.


 


– Now on the Default.aspx page, drop a GridView from the toolbox (Data section) onto it.


– Select “<New Data Source>” from the “Choose Data Source…” list


– Select Object in the “Choose a Data Source Type” dialog, and then OK.


– Select BookShop in the “Choose a Business” dialog, and then Next.


– Select “GetBooksByAuthorId” from the “Choose a method” dropdown, and then Next.


– Select “Control” in the “Parameter Source” dropdown and “DropDownList1” as the ControlID in the “Define Parameters” dialog, and Finish.


 


– That is all, your Default.aspx page should now have the following in the body of the source.


 


<body>


    <form id=”form1″ runat=”server”>


   


    <asp:DropDownList ID=”DropDownList1″ runat=”server” AutoPostBack=”True”


        DataSourceID=”ObjectDataSource1″ DataTextField=”AuthorName” DataValueField=”AuthorId”>


    </asp:DropDownList>


 


    <asp:ObjectDataSource ID=”ObjectDataSource1″ runat=”server”


        SelectMethod=”GetAuthors” TypeName=”BookShop”>


    </asp:ObjectDataSource>


   


    <asp:GridView ID=”GridView1″ runat=”server” AutoGenerateColumns=”False” DataSourceID=”ObjectDataSource2″>


        <Columns>


            <asp:BoundField DataField=”BookId” HeaderText=”BookId”


                SortExpression=”BookId” />


            <asp:BoundField DataField=”BookName” HeaderText=”BookName”


                SortExpression=”BookName” />


            <asp:BoundField DataField=”AuthorName” HeaderText=”AuthorName”


                SortExpression=”AuthorName” />


            <asp:BoundField DataField=”AuthorAlias” HeaderText=”AuthorAlias”


                SortExpression=”AuthorAlias” />


        </Columns>


    </asp:GridView>


   


    <asp:ObjectDataSource ID=”ObjectDataSource2″ runat=”server” SelectMethod=”GetBooksByAuthorId” TypeName=”BookShop”>


        <SelectParameters>


            <asp:ControlParameter ControlID=”DropDownList1″ Name=”authorId” PropertyName=”SelectedValue” Type=”String” />


        </SelectParameters>


    </asp:ObjectDataSource>


 


    </form>


</body>


 


– Run the application, you should now be able to change the content of the GridView by selecting different authors with the DropDownList.


 


“ObjectDataSource Class”


http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.aspx


“Language-Integrated Query (LINQ) – Projection Operations”


http://msdn.microsoft.com/en-us/library/bb546168.aspx


Comments (2)

  1. VelvaAlbertounu says:

    great! Thanks!

  2. Eric Talley says:

    Fantastic tutorial just what the doctor ordered. Thanks a heap or is that a stack? LOL!