c# - Select rows that match filter criteria from a DataTable

Select rows that match filter criteria from a DataTable
The DataTable class represents one table of in-memory data. The DataTable objects are conditionally case-sensitive. To create a DataTable programmatically the asp.net developers must first define its schema by adding DataColumn objects to the DataColumnCollection. To add rows to a DataTable, the developers must use the NewRow() method to return a new DataRow object at first. The DataTable also contains a collection of Constraint objects that can be used to ensure the integrity of the data.

The following asp.net c# tutorial code demonstrates how we can select data from a DataTable instance with the specified condition. So we will get the rows from the DataTable which match the filter criteria.

The DataTable class Select() method gets an array of DataRow objects. The Select(String) method overload gets an array of all DataRow objects that match the filter criteria.

The Select(string? filterExpression) method overload has a parameter named filterExpression. The filterExpression parameter is a String which is the criteria to use to filter the rows. This method returns an array of DataRow objects.

To create the filterExpression argument, the asp.net web developers have to use the same rules that apply to the DataColumn class's Expression property value for creating filters. If the column on the filter contains a null value then it will not be part of the result.

So finally, using the DataTable class Select(String) method overload’s the asp.net c# web developers can get data that match filter criteria from a DataTable instance.
DataRowArrayFromADataTableWithFilter.aspx

<%@ Page Language="C#" AutoEventWireup="true" %>
<%@ Import Namespace="System.Data" %>

<!DOCTYPE html>
<script runat="server">
    void Button1_Click(object sender, System.EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.TableName = "Books";

        DataColumn dc1 = new DataColumn();
        dc1.ColumnName = "BookID";
        dc1.DataType = typeof(int);
        dc1.AllowDBNull = false;
        dc1.Unique = true;

        DataColumn dc2 = new DataColumn();
        dc2.ColumnName = "BookName";
        dc2.DataType = typeof(string);

        DataColumn dc3 = new DataColumn();
        dc3.ColumnName = "Author";
        dc3.DataType = typeof(string);
        
        dt.Columns.AddRange(new DataColumn[] { dc1,dc2,dc3 });

        dt.Rows.Add(new object[] { 1, "Oracle SQL Tuning Pocket Reference", "Mark Gurry" });
        dt.Rows.Add(new object[] { 2, "Java Programming with Oracle JDBC", "Donald Bales" });
        dt.Rows.Add(new object[] { 3, "Oracle DBA Checklists Pocket Reference", "Quest Software" });

        GridView1.DataSource = dt;
        GridView1.DataBind();

        //this line return a DataRow array from DataTable
        DataRow[] drows = dt.Select("BookID < 3");
        for (int i = 0; i < drows.Length;i++ )
        {
            dt.Rows[i]["BookName"] = dt.Rows[i]["BookName"].ToString().ToLower();
        }

        Label1.Text = "After updating filtered rows (make BookName lower case , BookID < 3)";
            
        GridView2.DataSource = dt;
        GridView2.DataBind();
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>How to get a DataRow objects array from DataTable that match the filter criteria in ado.net</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <h2 style="color:DarkBlue; font-style:italic;">
            How to get a DataRow objects array from
            <br /> DataTable that match the filter criteria in ado.net
        </h2>
        <hr width="550" align="left" color="CornFlowerBlue" />
        <asp:GridView 
            ID="GridView1"
            runat="server"
            BorderColor="Snow"
            ForeColor="Snow"
            Width="550"
            >
            <HeaderStyle BackColor="Purple" Height="35" />
            <RowStyle BackColor="Magenta" />
            <AlternatingRowStyle BackColor="MediumPurple" />
        </asp:GridView>
        <br />
        <asp:Label
             ID="Label1"
             runat="server"
             Font-Size="Large"
             ForeColor="SkyBlue"
             Font-Italic="true"
             >
        </asp:Label>
        <br /><br />
        <asp:GridView 
            ID="GridView2"
            runat="server"
            BorderColor="Snow"
            ForeColor="Snow"
            Width="550"
            >
            <HeaderStyle BackColor="Purple" Height="35" />
            <RowStyle BackColor="Magenta" />
            <AlternatingRowStyle BackColor="MediumPurple" />
        </asp:GridView>
        <asp:Button 
            ID="Button1"
            runat="server"
            OnClick="Button1_Click"
            Text="Populate GridView"
            Height="45"
            Font-Bold="true"
            ForeColor="DarkBlue"
            />
    </div>
    </form>
</body>
</html>
More c# examples