Tuesday, April 3, 2007

Using Partials to extend the functionality of a DataTable

I've just discovered a really slick way to access data that is related to the row you are working with in a DataTable.

Previously, if I was working with data with one table (lets say Employees) and I wanted to find all the orders with a particular employee, I would go about it something like this:


EmployeesTableAdapter eta = new EmployeesTableAdapter();
EmployeesDataTable edt = pta.GetEmployee();
foreach (EmployeesRow er in edt)
{
if(er.Name == "George")

{
//do our work with the orders data
}
}


The cool thing about the code generated is that the class information is created as partial classes. With the use of partial classes, we can extend the partial class in our own code and as such, extend the functionality that is available for a particular row.

public partial class SuppliersRow
{
public EmployeesDataTable GetEmployeesOrders()
{
OrdersTableAdapter ota = new OrdersTableAdapter();
return ota.GetOrdersByEmployeeID(this.EmployeeID);
}
}

With the functionality extended, we can have the row we are working with be responsible for retrieving the data associated with that row.

foreach (EmployeesRow er in edt)
{
if(er.Name == "George")
{
//do our work with the orders data
}

}