Click here to Skip to main content
Click here to Skip to main content

Implementing a strongly typed collection with sort/filter/GetChanges features

By , 6 Jul 2005
 

Introduction

In my first steps with .NET, I was impressed by the dataset features. Data access was very simple to use/ to bind on Windows forms components such as DataGrid or ComboBox. But with datasets we are far from OOP. We are always working with Tables (DataTable), rows and columns. So when I began to create my own business objects, all became so difficult: data access problems, binding problems and collection problems. I needed a collection of each business objects that presents the DataSet/DataView features (Sorting, Filtering and the DataSet's GetChanges feature) and it must not be a dataset.

I found many discussion about Collection / Strongly Typed Collections but no one presents all features I needed. So I decided to develop my own custom collection that implements the needed interfaces and functions to be simple to use with Windows forms and also in data access.

Features

  • DataBinding

    The custom collection inherits from CollectionBase abstract class and implements IBindingList interface and can be bound on all controls of Windows forms (datagrid, combo, list,...).

  • Sorting

    The sorting feature is implemented in the IBindingList Interface. So you can sort a column in a DataGrid by clicking on the header of the column.

    Sorting is accessible with a Sort method that accepts a string as parameter ( like the property of the DataView).

  • Filtering

    Dataview presents an very useful feature specially when bound to a DataGrid: Filtering. The custom collection offers too the same feature via the ItemFilter property (RowFilter in the DataView). You can set to the ItemFilter property a string like "Name = Test" or "BirthDate > 01/01/1980" and the collection is updated to display only items that respond to the criteria.

  • GetChanges feature

    The custom collection is based on an abstract object called BaseObject which have a property called ObjectState that can be UnChanged, Added, Deleted or Changed. So any action you do on the collection is stored and you can have the 'List of Changes" made by the user on the collection of items.

    So any business object you need to implement in a collection must inherit from BaseObject.

Implementation

To create your own custom collection, you need a business object that inherits from BaseObject class. For example, if you create a customer class which present a Name property, this code is needed :

public class Customer : BaseObject
    public Customer()
    {
        //
        // TODO: Add constructor logic here
        //
    }
    private string TmpName;
    public string Name
    {
        get{return TmpName;}
        set
        {
            if (base.Compare(TmpName, value) !=0)
            {
                TmpName = value;
                SetDirtyFlag(); // To set the isdirty property of the object to true
            }

    }

Then create the Customers class which inherit from abstract class CustomCollection. Code will be like this:

public class Customers: CustomCollection
{
   public Customers()
   {
       // define the type of the collection items to Customer
       this.ItemType = typeof(Customer); 
   }
   //indexer that overides the default indexer
   public new Customer this[int index]
   {
      get
      {
         return (Customer)(base[index]);
      }
      set
     {
         base[index] = value;
     }
}
// GetChanges Method that overrides the default one 
//to have a Customer Collection in return
    public new Customers GetChanges()
    {
        return (Customers) base.GetChanges();
    }
}

The demo project includes also source code of CustomCollection and BaseObject.

Conclusion

With this CustomCollection, no need to work with DataSets and DataViews. It combines the features of both of these components and we can work with our business objects. So data access can be easier, databinding in Windows forms and web forms is assured and performance is much better than dataset when filling the custom collection from a datareader.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Hayder Marzouk
Web Developer
France France
Member
MCSD Asp.Net certified developer

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionFind?memberble0t26 Oct '06 - 6:28 
Questionasp.net version?membercxjc23 Aug '06 - 5:38 
QuestionNot Case sensative?memberBigJoe7141 Jun '06 - 14:16 
GeneralVB.Net Versionmembersrinum28 Feb '06 - 5:32 
QuestionWhat about design-time support for data bindingmemberAlisterTheDog14 Jan '06 - 8:55 
QuestionSerialization?memberbelchski14 Nov '05 - 9:22 
AnswerRe: Serialization?memberAshwin Seshadri14 Nov '05 - 13:06 
GeneralRe: Serialization?memberbelchski14 Nov '05 - 13:20 
GeneralRe: Serialization?memberJohny Nguyen23 Nov '05 - 16:23 
GeneralRe: Serialization?memberPatrick Hatton21 Dec '05 - 6:00 
GeneralRe: Serialization?membersrinum23 Feb '06 - 9:02 
GeneralRe: Serialization?membersrinum23 Feb '06 - 10:37 
GeneralRe: Serialization?memberAtlas200228 Feb '06 - 4:01 
GeneralI greatly increased performance!!!!memberAlexei Tarnakin18 Oct '05 - 0:47 
GeneralRe: I greatly increased performance!!!!sussAnonymous18 Oct '05 - 1:55 
GeneralRe: I greatly increased performance!!!!memberAlexei Tarnakin18 Oct '05 - 5:28 
GeneralProblem with clear methodmemberAlexei Tarnakin28 Sep '05 - 22:01 
GeneralRe: Problem with clear methodmemberJohny Nguyen17 Oct '05 - 23:49 
GeneralRe: Problem with clear methodmemberAlexei Tarnakin18 Oct '05 - 0:31 
GeneralRe: Problem with clear methodmemberJohny Nguyen19 Oct '05 - 18:52 
GeneralRe: Problem with clear methodmemberAlexei Tarnakin20 Oct '05 - 0:36 
QuestionWhere is the end?memberAlexei Tarnakin23 Aug '05 - 8:31 
AnswerRe: Where is the end?memberHayder Marzouk23 Aug '05 - 22:29 
GeneralimprovementsmemberAlexei Tarnakin17 Jun '05 - 4:51 
GeneralRe: improvementsmemberAlexei Tarnakin17 Jun '05 - 5:15 
GeneralRe: improvementsmemberHayder Marzouk17 Jun '05 - 7:44 
GeneralRe: improvementsmemberHayder Marzouk20 Jun '05 - 1:39 
GeneralRe: improvementsmemberAlexei Tarnakin24 Jun '05 - 9:35 
GeneralRe: improvementsmemberHayder Marzouk29 Jun '05 - 9:07 
GeneralRe: improvementsmemberAlexei Tarnakin1 Jul '05 - 2:23 
GeneralRe: improvementsmemberHayder Marzouk2 Jul '05 - 10:14 
GeneralRe: improvementsmemberAlexei Tarnakin3 Jul '05 - 4:27 
GeneralRe:ImprovementsmemberHayder Marzouk3 Jul '05 - 10:43 
GeneralRe:ImprovementsmemberAlexei Tarnakin5 Jul '05 - 4:41 
GeneralRe:ImprovementsmemberAlexei Tarnakin5 Jul '05 - 5:07 
GeneralRe:ImprovementsmemberHayder Marzouk5 Jul '05 - 21:47 
GeneralRe:ImprovementsmemberHayder Marzouk5 Jul '05 - 21:56 
GeneralRe:ImprovementsmemberHayder Marzouk5 Jul '05 - 21:52 
GeneralRe:ImprovementsmemberAlexei Tarnakin5 Jul '05 - 23:30 
GeneralRe:ImprovementsmemberAlexei Tarnakin6 Jul '05 - 4:12 
GeneralRejectChanges method to BaseList objectmemberJohny Nguyen15 Jun '05 - 22:45 
GeneralRe: RejectChanges method to BaseList objectmemberHayder Marzouk16 Jun '05 - 0:16 
GeneralRe: RejectChanges method to BaseList objectmemberJohny Nguyen16 Jun '05 - 18:06 
GeneralHowto Implement IEditableObject methodmemberJohny Nguyen6 Jun '05 - 18:59 
GeneralRe: Howto Implement IEditableObject methodmemberHayder Marzouk6 Jun '05 - 23:21 
QuestionHow to set ObjectStateType of ChangedmemberJohny Nguyen5 Jun '05 - 23:08 
AnswerRe: How to set ObjectStateType of ChangedmemberHayder Marzouk6 Jun '05 - 3:21 
GeneralFilteringmembermailbox4spam8 May '05 - 11:56 
GeneralRe: FilteringmemberHayder Marzouk9 May '05 - 6:49 
GeneralProblem in ComparememberMarc Brooks18 Apr '05 - 9:30 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130516.1 | Last Updated 6 Jul 2005
Article Copyright 2005 by Hayder Marzouk
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid