[ Team LiB ] |
Recipe 3.12 Filtering for Null ValuesProblemYou want to filter a DataView for rows that have null values. SolutionsUse the IS NULL clause with the RowFilters property of the DataView. The sample code contains two event handlers:
The C# code is shown in Example 3-12. Example 3-12. File: FilterNullValuesForm.cs// Namespaces, variables, and constants using System; using System.Configuration; using System.Data; using System.Data.SqlClient; // Table name constants private const String ORDERS_TABLE = "Orders"; // Field name constants private const String SHIPREGION_FIELD = "ShipRegion"; // . . . private void FilterNullValuesForm_Load(object sender, System.EventArgs e) { // Create and fill the Orders table. DataTable dt = new DataTable(ORDERS_TABLE); SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Orders", ConfigurationSettings.AppSettings["Sql_ConnectString"]); da.Fill(dt); // Bind the default view to the grid. dataGrid.DataSource = dt.DefaultView; } private void filterButton_Click(object sender, System.EventArgs e) { String filter = SHIPREGION_FIELD + " IS NULL"; DataView dv = (DataView)dataGrid.DataSource; if(filterButton.Text == "Apply Filter") { // Apply the filter. dv.RowFilter = filter; dataGrid.CaptionText = "Orders table: filtered for null ShipRegion field."; filterButton.Text = "Remove Filter"; } else { // Remove the filter. dv.RowFilter = ""; dataGrid.CaptionText = "Orders table: no filter."; filterButton.Text = "Apply Filter"; } } DiscussionEvery DataTable has a default DataView associated with it that can filter a table for records meeting specific criteria. In the solution, the RowFilter property of the DefaultView is filtered for rows containing a null ShipRegion field. The result of applying the filter is immediately reflected in any controls bound to the DataView object in addition to the any operations performed on the records within the DataView. Alternatively, you can use the Select( ) method on the DataTable underlying the DataView to retrieve an array of DataRow objects containing only rows with the null ShipRegion using the same filter expression. |
[ Team LiB ] |