[ Team LiB ] |
Recipe 3.8 Finding Rows in a DataTableProblemYou need to find a row or group of rows in a DataTable meeting certain criteria. SolutionChoose from the three techniques shown in the sample code to locate data in the table meeting user-specified criteria. The sample code contains two event handlers:
The C# code is shown in Example 3-8. Example 3-8. File: FindDataTableRowsForm.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 ORDERID_FIELD = "OrderID"; private const String SHIPCOUNTRY_FIELD = "ShipCountry"; // . . . private void FindDataTableRowsForm_Load(object sender, System.EventArgs e) { // Fill the Orders table. SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Orders", ConfigurationSettings.AppSettings["Sql_ConnectString"]); DataTable dt = new DataTable(ORDERS_TABLE); da.Fill(dt); da.FillSchema(dt, SchemaType.Source); // Bind the table to the grid. dataGrid.DataSource = dt.DefaultView; } private void findButton_Click(object sender, System.EventArgs e) { // Get the table bound to the grid. DataTable dt = ((DataView)dataGrid.DataSource).Table; // Build the filter using contents of the text box. String filter = SHIPCOUNTRY_FIELD + " = '" + shipCountryTextBox.Text + "'"; // Locate the records using the Select( ) method of the DataTable. DataRow[] drc = dt.Select(filter); resultTextBox.Text = "DataTable.Select returned " + drc.Length + " record(s)." + Environment.NewLine; // Iterate over the collection of rows filtered in the previous step // and find them in the table using the Find( ) method of the // DataRowCollection for the DataTable. int findCount = 0; foreach(DataRow row in drc) { DataRow foundRow = dt.Rows.Find(row[ORDERID_FIELD]); if (foundRow != null) findCount++; } resultTextBox.Text += "DataTable.Rows.Find returned " + findCount + " record(s)." + Environment.NewLine; // Locate records using the RowFilter property of the DataView. DataView dv = new DataView(dt); dv.RowFilter = filter; resultTextBox.Text += "DataView.RowFilter returned " + dv.Count + " record(s)."; } DiscussionThere are three ways to locate one or more rows in a table:
For more information about the Find( ) and FindRows( ) methods of the DataView, see Recipe 3.9. |
[ Team LiB ] |