Often we need to filter a DataGridView in our database programs. The C# datagrid is the best tool for database display & modification. There is an easy shortcut to filtering a DataTable in C# for the DataGridView. This is done by simply applying an expression to the required column. The expression contains the value of the filter to be applied. The filtered DataTable must be then set as the DataSource of the DataGridView.
In this program we have a simple DataTable containing a total of 5 columns: Item Name, Item Price, Item Quantity, Item Tax & Item Total. This DataTable is then displayed in the C# datagrid. The fourth & fifth columns are to be calculated as a multiplied value(by multiplying 2nd and 3rd columns).
We simply add rows with values set for three columns. We let the Tax & Total columns get calculated automatically through the Expression value of the Columns. The application of expressions is simple, just type what you want it to be! For example, if you want the 10% Tax Column to generate values automatically, you can set the Column.Expression as:
"<Column1> = <Column2> * <Column3> * 0.1"
where the Columns are Tax, Price & Quantity respectively. Note a hint here: the columns are specified as a decimal type and 0.1 means precisely 10%.
We simply add rows with values set for three columns. We let the Tax & Total columns get calculated automatically through the Expression value of the Columns. The application of expressions is simple, just type what you want it to be! For example, if you want the 10% Tax Column to generate values automatically, you can set the Column.Expression as:
"<Column1> = <Column2> * <Column3> * 0.1"
where the Columns are Tax, Price & Quantity respectively. Note a hint here: the columns are specified as a decimal type and 0.1 means precisely 10%.
Finally after all rows have been set, we can apply appropriate filters on the columns in the C# datagrid control. This is accomplished by setting the filter value in one of the three TextBoxes & clicking the corresponding filter button. The Filter expressions are calculated by simply picking up the values from the validating TextBoxes & matching them to their Column name.
Note that the text changes dynamically on the Button. The Text property allows you to easily preview a filter value. In this way we achieve the TextBox validation.
Note that the text changes dynamically on the Button. The Text property allows you to easily preview a filter value. In this way we achieve the TextBox validation.
namespace Filter_a_DataGridView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
DataTable dt = new
DataTable(); // Form Table that Persists
//throughout and its structure and Column values never change
//once you click the "Show Table with Tax & Amount" Button
//throughout and its structure and Column values never change
//once you click the "Show Table with Tax & Amount" Button
private void
Form1_Load(object sender, EventArgs e)
{
DataColumn Item_Name = new DataColumn("Item_Name", // Define
Type.GetType("System.String")); //
Type.GetType("System.String")); //
DataColumn Item_Price = new
DataColumn("Item_Price", // the input
Type.GetType("System.Decimal")); //
Type.GetType("System.Decimal")); //
DataColumn Item_Qty = new DataColumn("Item_Qty", // Columns
Type.GetType("System.Decimal"));
Type.GetType("System.Decimal"));
DataColumn Item_Tax = new
DataColumn("Item_tax",
// Define Tax
Type.GetType("System.Decimal"));
Type.GetType("System.Decimal"));
// "Item_Tax" column is calculated (10% Tax)
Item_Tax.Expression = "Item_Price *
Item_Qty * 0.1";
DataColumn Item_Total = new
DataColumn("Item_Total", // Define Total
Type.GetType("System.Decimal"));
Type.GetType("System.Decimal"));
// "Item_Total" column is calculated as (Price * Qty + Tax)
Item_Total.Expression = "Item_Price *
Item_Qty + Item_Tax";
dt.Columns.Add(Item_Name); // Add 4
dt.Columns.Add(Item_Price); // Columns
dt.Columns.Add(Item_Qty); // to
dt.Columns.Add(Item_Tax); // the
dt.Columns.Add(Item_Total); // Datatable
}
private void
btnInsert_Click(object sender, EventArgs e)
{
dt.Rows.Add(txtItemName.Text, txtItemPrice.Text, txtItemQty.Text);
MessageBox.Show("Row
Inserted");
}
private void btnShowFinalTable_Click(object sender, EventArgs
e)
{
this.Height = 637; //
Extend
dgv.DataSource = dt;
btnShowFinalTable.Enabled = false;
}
private void
btnPriceFilter_Click(object sender, EventArgs e)
{
// Creating a new table allows to preserve
//original data and work the filters on the new DataTable
DataTable NewDT = new
DataTable();
//Create a new DataTable
NewDT = dt.Copy();
//Copy existing data
//Apply Filter Value
NewDT.DefaultView.RowFilter = "Item_Price
= ' " + txtPriceFilter.Text + " '
";
//Set new table as DataSource
dgv.DataSource = NewDT;
}
private void
txtPriceFilter_TextChanged(object sender, EventArgs e)
{
// Change/Update Button Text Dynamically
btnPriceFilter.Text = "Filter
DataGridView by Price : " + txtPriceFilter.Text;
}
private void
btnQtyFilter_Click(object sender, EventArgs e)
{
// Creating a new table allows to preserve
//original data and work the filters on the new DataTable
DataTable NewDT = new
DataTable();
NewDT = dt.Copy();
NewDT.DefaultView.RowFilter = "Item_Qty
= ' " + txtQtyFilter.Text + " '
";
dgv.DataSource = NewDT;
}
private void
txtQtyFilter_TextChanged(object sender, EventArgs e)
{
// Change/Update Button Text Dynamically
btnQtyFilter.Text = "Filter
DataGridView by Total : " + txtQtyFilter.Text;
}
private void
btnTotalFilter_Click(object sender, EventArgs e)
{
// Creating a new table allows to preserve
//original data and work the filters on the new DataTable
DataTable NewDT = new
DataTable();
NewDT = dt.Copy();
NewDT.DefaultView.RowFilter = "Item_Total
= ' " + txtTotalFilter.Text + " '
";
dgv.DataSource = NewDT;
}
private void
txtTotalFilter_TextChanged(object sender, EventArgs e)
{
// Change/Update Button Text Dynamically
btnTotalFilter.Text = "Filter
DataGridView by Total : " + txtTotalFilter.Text;
}
private void
btnFilterReset_Click(object sender, EventArgs e)
{
DataTable NewDT = new
DataTable();
NewDT = dt.Copy();
dgv.DataSource = NewDT;
}
}
}
Please Note :
** Do not Copy & Paste code written here ; instead type it in your Development Environment
** Testing done in .Net Framework 4.5 but code should be very similar for previous versions of .Net
** All Program Codes on Blog are 100% tested & running.
** Do not Copy & Paste code written here ; instead type it in your Development Environment
** Testing done in .Net Framework 4.5 but code should be very similar for previous versions of .Net
** All Program Codes on Blog are 100% tested & running.