Building a DAL using Strongly Typed TableAdapters and DataTables in VS 2005 and ASP.NET 2.0
page 9 of 11
by Scott Guthrie
Feedback
Average Rating: 
Views (Total / Last 10 Days): 52564/ 117

Tutorial 8: Adding Custom Code to the DAL

One of the nice things about the data designer is that the .xsd file that declaratively stores all of the relevant definitions gets translated into either VB or C# code at compile and runtime.  This means that you can easily step through it within the debugger, and always understand “what is it doing for me under the covers”. 

To easily see what code has been generated by the data designer, just open the “Class View” property window in Visual Web Developer or VS 2005 (if it isn’t visible select the View->Class View menu item), and navigate to the respective namespaces and types to see the object model of them.  You can then right-click and choose “Browse Definition” to jump to the generated code for any method:

Figure 28

In addition to viewing the generated code, you can also add to it and extend it in many ways.  You can do this either by sub-classing the generated objects, or alternatively by using the new “Partial” keyword feature now supported by the .NET 2.0 language compilers.  The partial keyword enables you to add any method, property or events you want to the classes generated within the DAL, and they will be compiled together into a single generated type.  Because the partial class code you write lives in a separate file from the files generated by the designer, you do not have to worry about the designer ever clobbering or overwriting your code.

 

To see a simple example of how you could use this feature, I could easily add an additional “GetProducts()” method to each row of Suppliers within my Northwind DAL (allowing me to easily obtain the ProductDataTable for the specific Supplier I have a reference to).  Enabling this is as easy as adding a “SuppliersRow.vb” file in my app_code directory and adding this code to it:

Partial Public Class NorthWind
    Partial Public Class SuppliersRow
        Public Function GetProducts() As ProductsDataTable
            Dim productsAdapter As New NorthwindTableAdapters.ProductsTableAdapter
            Return productsAdapter.GetProductsBySupplier(Me.SupplierID)
        End Function
    End Class
End Class

This tells the VB compiler that I want to add a “GetProducts()” method to the SuppliersRow class (I’m using the “SupplierID” property on the supplier’s row to automatically figure out the subset of products by Supplier – note that I can write “Me.SupplierId” – since this method is part of the SuppliersRow class).

Once I add this I can then write this code to easily hierarchically list each product produced by each Supplier:

Dim suppliersAdapter As New NorthwindTableAdapters.SuppliersTableAdapter
Dim suppliers As Northwind.SuppliersDataTable
Dim supplier As Northwind.SuppliersRow
suppliers = suppliersAdapter.GetAllSuppliers()
For Each supplier In suppliers
Response.Write("Supplier: " & supplier.CompanyName & "<br>")
      Dim products As Northwind.ProductsDataTable
      Dim product As Northwind.ProductsRow
      products = supplier.GetProducts()
      For Each product In products
            Response.Write("------- Product: " & product.ProductName & "<br>")
      Next
Next

And I could easily build this page using a <asp:DataList> and <asp:Repeater> control to databind a list of suppliers, and then allow a user to click any of the suppliers to list a hierarchical drill-down of their products:

Figure 29

I’d do this by databinding the suppliers against the DataList:

Hierarchy.aspx.vb:

Protected Sub Page_PreRender(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.PreRender
Dim suppliersAdapter As New NorthwindTableAdapters.SuppliersTableAdapter
      DataList1.DataSource = suppliersAdapter.GetAllSuppliers()
      DataList1.DataBind()
End Sub

And then using the “Select” feature of DataList to have the selected item template hierarchically retrieve and display the products (this way only the selected supplier’s products are retrieved):

Hierarchy.aspx:

<h1>Supplier/Product Drilldown:</h1>
<p>Click a Supplier to List Its Products</p>
      
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
            <asp:linkbutton ID="Details" CommandName="Select" 
           runat="server"><%#Eval("CompanyName") %></asp:linkbutton>
</ItemTemplate>
      <SelectedItemTemplate>     
            <div class="selectedsupplier">
                <strong><%#Eval("CompanyName") %></strong>
                <ul>
                <asp:Repeater ID="ProductsList" 
               DataSource='<%# Container.DataItem.Row.GetProducts() %>' runat="server">
                     <ItemTemplate>
                         <li><%#Eval("ProductName")%></li>
                     </ItemTemplate>
                </asp:Repeater>
                </ul>
            </div>
            
</SelectedItemTemplate>
</asp:DataList>

View Entire Article

User Comments

Title: mn   
Name: Manpreet
Date: 2009-02-03 7:02:09 AM
Comment:
Very Good, It helped me
thnX
Title: NVP   
Name: NVP
Date: 2008-09-02 12:24:25 AM
Comment:
Nice one, Thanx a lot.
Title: ASP.NET   
Name: Muhamamd Ismail
Date: 2008-08-22 12:54:01 AM
Comment:
Dear I am design website in Dreamwear now I want upload the result of studnets in website using asp.net any one can help me how I can make its please and visit website gave me your suggestion how I make it in asp.net www.apnakhuzdar.com and my emailaddress ismardoi2001@hotmail.com
Title: ASP.NET   
Name: Muhamamd Ismail
Date: 2008-08-22 12:50:49 AM
Comment:
Dear I am new User of ASP.NET now working in Asp.net I haveing that problem of how work with ado.net in C# any one can help me in asp.net kindly send me ismardoi2001@yahoo.com
Title: ASP.NET   
Name: Muhammad Ismail
Date: 2008-08-22 12:47:13 AM
Comment:
I am new user of asp.net its very useful for all level I hope its is successful task .and
Title: Pain is just me....   
Name: Mohammad Javed
Date: 2008-06-18 6:27:59 AM
Comment:
Using Insert, Update, and Delete DBDirect Commands on TableAdapters is very good articles fo us...
Title: Saeeedaa Khannnnnnnn   
Name: Mohammad Javed
Date: 2008-06-18 6:24:56 AM
Comment:
I've been using ASP for 5yrs and felt the need to become current in my coding practices. I Spent 2 weeks trying to find a suitable method to work with Access DB so I could update my code and then update my DB to SQL. MS built in functionaliy is not very flexible. This functionality is so much better than RecordSet in ASP and your Demo actually Works. Good Job! Now I can get something done.
Title: Badal Verma   
Name: Badal Verma
Date: 2008-06-18 6:23:29 AM
Comment:
I think this is very helpfull articles for all person beginner as well as professional.
Title: Very Good   
Name: Badal Verma
Date: 2008-06-18 6:22:06 AM
Comment:
Very good articles..
Title: Excellent Articles   
Name: Mohammad Javed
Date: 2008-06-18 6:21:06 AM
Comment:
Nice Article.
Title: Good   
Name: John
Date: 2007-11-27 2:39:07 AM
Comment:
nice Article
Title: Good article   
Name: Basir
Date: 2007-09-27 1:12:37 PM
Comment:
I found the information you have provided very useful and thorough. Thanks.
Title: Building a DAL using Strongly Typed TableAdapters and DataTables in VS 2005 and ASP.NET 2.0   
Name: William
Date: 2007-07-19 11:43:06 PM
Comment:
I've been using ASP for 5yrs and felt the need to become current in my coding practices. I Spent 2 weeks trying to find a suitable method to work with Access DB so I could update my code and then update my DB to SQL. MS built in functionaliy is not very flexible. This functionality is so much better than RecordSet in ASP and your Demo actually Works. Good Job! Now I can get something done.
Title: MR   
Name: Baktash Ahmed
Date: 2007-02-22 4:38:16 AM
Comment:
This a very helptful and detailed explanation of how to create a data source and and modify and the table adapters. It has certainly helped me alot on my project thanks alot Scott for good job and keep it up
Title: This is willl help a great deal   
Name: tope Fatayo
Date: 2007-02-17 6:29:50 AM
Comment:
This is a wonderful article. this should meet my data access need in my final year project
Title: nice explanation   
Name: B.D
Date: 2006-11-09 3:26:56 AM
Comment:
Clear Explanation with a good examples!!!!!!!!!!!

thankz a lot
Title: perfect !!   
Name: Jan
Date: 2006-10-04 4:17:05 PM
Comment:
Thank you
Title: Many thanks   
Name: Rolly
Date: 2006-09-08 10:09:08 AM
Comment:
Many thanks for taking the time to put this together. It is the first time i use a Tableadapter and the blinkers are off my eyes. Cheers
Title: Well-done   
Name: Susantha Soysa
Date: 2006-08-22 8:42:21 AM
Comment:
This opened my eyes to use partial classes effectively. Many thanks for your time.
Title: Great Article BUT...   
Name: Chester West
Date: 2006-07-12 7:29:43 PM
Comment:
This is a great article telling the user how to setup a datasource HOWEVER it doesn't mention using the source in a web service (Microsoft got smart...they realized that the most time consuming part of the web service is getting data...therefore in the .NET 2.0 version they made it hard to create/use datasets in order to discourage anybody from using the web service)

Product Spotlight
Product Spotlight 





Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2021 ASPAlliance.com  |  Page Processed at 2021-02-27 4:41:46 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search