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
{
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 DataRow
s, 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.