Click here to Skip to main content
Licence CPOL
First Posted 26 Jul 2007
Views 29,248
Downloads 304
Bookmarked 15 times

.NET DataSet filter demonstration

By | 26 Jul 2007 | Article
This article explains how to filter rows in a DataSet/DataTable. The example provided will help you get information faster.

Screenshot - DTFilter.jpg

Introduction

This article is a demonstration of filtering a DataSet/DataTable with the Select method. This article is for beginners and will help them in learning the language basics.

Background

This is just a hobby program which I thought will be helpful for .NET beginners.

Using the code

The sample code contains only a WinForm which loads some rows with random data. I have added a ListBox with ready made filter expressions and there is a TextBox which will help you to enter user-defined filter expressions.

There is a DataTable I use in this application as a global - parent datatable. I apply filter expressions on this. This DataTable is a dynamically created one. The LoadData() method is used to fill random data into this DataTable.

DataTable dt = new DataTable();
private void Form1_Load(object sender, EventArgs e)
{
    dt.Columns.Add("A");
    dt.Columns.Add("B");
    LoadData();
}

The LoadDate() method is shown below. Notice the usage of Random(). The same method is associated with the 'Reset Data' button.

private void LoadData()
{
    dt.Rows.Clear();
    Random r = new Random();
    for (int i = 0; i < 10; i++)
    {
        DataRow dr = dt.NewRow();
        dr["A"] = r.Next(0, 1000);
        dr["B"] = r.Next(0, 1000);
        dt.Rows.Add(dr);
    }

    dataGridView1.DataSource = dt;
}

Next is the most important method in this application. This is the method which gives 'life' to this application: the DoFilter() method. You can pass the filter expression as a string to this method and the effect can be seen on the DataGridView attached.

private void DoFilter(string filter)
{
    DataTable dt1 = dt.Clone();
    try
    {
        foreach (DataRow dr in dt.Select(filter))
    {
        dt1.ImportRow(dr);
    }
        dataGridView1.DataSource = dt1;
    }
    catch
    // Warning: Non-standard! - without proper catching of exception

    {
        MessageBox.Show("Error in filter expression");
    }
}

If you give an invalid filter expression, the application will show an 'Error in filter expression' message. You may have noticed the dt.Select(filter) in the above code. As you know, this is the key of this article which does the filtering job. Since dt.Select() returns an array of DataRows, I used a temporary table with the same structure (dt.Clone()) to import the filtered results and bind it to DataGridView.

Generic method

Here is a generic method overview for your projects. Please do not use this as it is since I wrote this function/method as a part of writing this article and it is not properly tested.

private DataTable DoDataTableFilter(DataTable dt, string filter)
{
    DataTable dt1 = dt.Clone();
    foreach (DataRow dr in dt.Select(filter))
    {
        dt1.ImportRow(dr);
    }
    return dt1;
}

Points of interest

Note that since this is a very simple and quickly-made application, I did not do proper exception handling and object disposals. Standard code always must follow proper coding standards.

Happy coding.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

NinethSense



India India

Member

Follow on Twitter Follow on Twitter
Praveen.V.Nair - aka NinethSense - Microsoft MVP - is a person with an abnormal passion for technology. He has been playing with electronics from the age of 10 and with computers from the age of 14. He usually blogs at http://blog.ninethsense.com/.

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

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralMy vote of 1 PinmemberSyed Javed22:21 8 Jul '11  
GeneralGood! PinmemberSunvory18:40 29 Dec '09  
GeneralSimple but of Great Use PinmemberSandeepan23:15 23 Aug '07  
QuestionWhy not use a DataView? PinmemberDavid Hay20:43 30 Jul '07  
Why copy the filtered rows to another DataTable? This is exactly the purpose of the DataView class. If this article is for beginners you should introduce them to DataView.
 
Regards
David
AnswerRe: Why not use a DataView? PinmemberNinethSense21:45 30 Jul '07  

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120529.1 | Last Updated 27 Jul 2007
Article Copyright 2007 by NinethSense
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid