Filtern Sie eine DataTable in C#
-
Verwenden Sie die Eigenschaft
DataView.RowFilter
, um dieDataTable
inC#
zu filtern -
Verwenden Sie die Methode
CopyToDataTable()
, um dieDataTable
inC#
zu filtern -
Verwenden Sie die
Select()
-Methode, um dieDataTable
inC#
zu filtern
Der DataView
des .NET Frameworks stellt eine databindtable
zum Filtern dar, die eine angepasste Ansicht einer DataTable
in C# darstellt. Die DataTable
(mit der DataView
synchronisiert oder verbunden ist) enthält Daten, die gefiltert werden müssen.
Ein DataView
kann keine Daten speichern und repräsentiert nur Daten seiner entsprechenden DataTable
. Alle Berechnungen, die auf einer DataView
durchgeführt werden, wirken sich auf die DataTable
aus.
Darüber hinaus wirkt sich das Ändern oder Modifizieren der Daten einer DataTable auf alle zugehörigen oder verbundenen DataViews
aus.
Die Klasse DataView
existiert im Namensraum System.Data
in C#. In diesem Tutorial lernen Sie die drei wichtigsten Methoden zum Filtern einer DataTable
in C# kennen.
Die Eigenschaft DataView.RowFilter
, die Methoden CopytoDataTable()
und Select()
sind einige der wichtigsten Methoden zum Filtern einer DataTable
in C#. Die Filterung ist eine häufige Anforderung für jede C#-Anwendung, da die Daten immer größer werden und eine Manipulation auf hoher Ebene erfordern.
Verwenden Sie die Eigenschaft DataView.RowFilter
, um die DataTable
in C#
zu filtern
Die Eigenschaft DataView.RowFilter
ist beim Filtern einer DataTable
in C# äusserst produktiv. Es ermöglicht Ihnen, die mit einer DataView
verknüpften Daten abzurufen oder festzulegen, und hilft Ihnen, die einzelnen DataView
-Objekte zu definieren, die die Daten in jeder DataTable
filtern können.
Die Eigenschaft RowFilter
stellt eine Zeichenfolge dar, die angibt, wie Zeilen gefiltert werden sollen, und der Wertdatentyp dieser Zeichenfolge ist System.String
. Sie können einen RowFilter
-Wert als username = "aUsername"
zuweisen und die Zeilen von DataView
filtern, um gefilterte Daten programmgesteuert in einer C#-Anwendung anzuzeigen.
Das Interessanteste an der Eigenschaft RowFilter
ist ihre Fähigkeit, Daten der zugrunde liegenden DataTable
zu ändern/filtern, von denen eine DataView eine dynamische Ansicht bietet. Die dynamischen und Datenbindungsfunktionen einer DataView machen sie ideal für die Datenbindung von C#-Anwendungen.
Ähnlich wie die Ansicht einer DataTable
kann eine DataView
in C# dynamisch einen einzelnen Datensatz darstellen, wodurch Sie verschiedene Filter durchführen können. Sie können die Eigenschaft RowFilter
auf eine DataView
anwenden, wodurch alle unnötigen Daten der Zeilensammlung des zugehörigen DataTable
-Objekts ausgeblendet werden, die nicht mit dem Filterausdruck oder den Filterkriterien übereinstimmen.
using System;
using System.Data;
using System.Windows.Forms;
namespace DataTableExp {
public partial class Form1 : Form {
private DataSet dtSet;
public Form1() {
InitializeComponent();
CreateTable();
}
private void CreateTable() {
// Create a new DataTable.
DataTable filterExpCust = new DataTable("FilterUserDataTable");
DataColumn filterExpColumn;
DataRow filterExpDRow;
// create an `id` column
filterExpColumn = new DataColumn();
// define the column's type
filterExpColumn.DataType = typeof(Int32);
filterExpColumn.ColumnName = "id"; // column name
filterExpColumn.Caption = "User Account `ID`";
filterExpColumn.ReadOnly = false;
filterExpColumn.Unique = true;
// Add column to the DataColumnCollection.
filterExpCust.Columns.Add(filterExpColumn);
// create a `name` column
filterExpColumn = new DataColumn();
filterExpColumn.DataType = typeof(String);
filterExpColumn.ColumnName = "Name"; // column name
filterExpColumn.Caption = "User Account `Name`";
filterExpColumn.AutoIncrement = false;
filterExpColumn.ReadOnly = false;
filterExpColumn.Unique = false;
// Add column to the DataColumnCollection.
filterExpCust.Columns.Add(filterExpColumn);
// create an `address` column
filterExpColumn = new DataColumn();
filterExpColumn.DataType = typeof(String);
filterExpColumn.ColumnName = "Address"; // column name
filterExpColumn.Caption = "User Account Address";
filterExpColumn.ReadOnly = false;
filterExpColumn.Unique = false;
// add colume to the `filterExpColumn`
filterExpCust.Columns.Add(filterExpColumn);
// make the `id` the primary key of the table
DataColumn[] PrimaryKeyColumns = new DataColumn[1];
PrimaryKeyColumns[0] = filterExpCust.Columns["id"];
filterExpCust.PrimaryKey = PrimaryKeyColumns;
// create a new DataSet
dtSet = new DataSet();
// add `FilterUserDataTable` table to the DataSet.
dtSet.Tables.Add(filterExpCust);
// add data rows to the `FilterUserDataTable` table using the `NewRow` method
// first user details
filterExpDRow = filterExpCust.NewRow();
filterExpDRow["id"] = 1001;
filterExpDRow["Name"] = "Stephan Hawking";
filterExpDRow["Address"] = "79 Gulberg Road, Havana, Cuba";
filterExpCust.Rows.Add(filterExpDRow);
// second user details
filterExpDRow = filterExpCust.NewRow();
filterExpDRow["id"] = 1002;
filterExpDRow["name"] = "John Snow";
filterExpDRow["Address"] = " The Kings Landing, North California";
filterExpCust.Rows.Add(filterExpDRow);
// third user details
filterExpDRow = filterExpCust.NewRow();
filterExpDRow["id"] = 1003;
filterExpDRow["Name"] = "Scooby Doo";
filterExpDRow["Address"] = "194 St. Patrick Avenue, London, UK";
filterExpCust.Rows.Add(filterExpDRow);
}
private void button2_Click(object sender, EventArgs e) {
// Create a BindingSource
BindingSource bs = new BindingSource();
bs.DataSource = dtSet.Tables["FilterUserDataTable"];
// Bind data to DataGridView.DataSource
dataGridView1.DataSource = bs;
}
private void button1_Click(object sender, EventArgs e) {
// filter the datatable
// create a customers table and access it into a `dv` DataView
DataView dv = new DataView(dtSet.Tables["FilterUserDataTable"]);
// it will filter the row where `id` is `1001`
dv.RowFilter = "id = 1001";
// output the filtered datatable in a `dataGridView1` data grid view
dataGridView1.DataSource = dv;
}
}
}
Ausgang:
*click `button2` to bind data to a data grid view*
*click `button2` to filter datatable*
id Name Address
1001 Stephan Hawking 79 Gulberg Road, Havana, Cuba
Die Methode CreateTable()
erstellt eine Datentabelle FilterUserDataTable
, die die Spalten id
, name
und address
enthält. Die Schaltfläche button2
kann die Daten dieser DataTable
an dataGridView1
binden.
Drücken Sie button1
, um die DataTable
zu filtern und die gefilterten Ergebnisse in der dataGridView1
anzuzeigen.
Verwenden Sie die Methode CopyToDataTable()
, um die DataTable
in C#
zu filtern
Sie können eine DataTable
filtern und die Ergebnisse in einer neuen DataTable
statt in einer DataView
zurückgeben. Eine neue DataTable
enthält als Ergebnis Kopien eines DataRow
-Objekts, wenn ein IEnumberable<T>
-Eingabeobjekt gegeben ist.
Die Quelle IEnumerable<T>
der DataTable
darf nicht null
sein; Andernfalls kann die neue DataTable
nicht erstellt werden. Es basiert auf einer Abfrage, um eine DataTable
auszuwählen und ihren Inhalt in eine neue zu kopieren, die an BindingSource
gebunden ist, die als Proxy für DataGridView
fungiert.
private void button1_Click(object sender, EventArgs e) {
DataTable _newFilteredDataTable =
dtSet.Tables["FilterUserDataTable"].Select("id = 1001").CopyToDataTable();
dataGridView1.DataSource = _newFilteredDataTable;
}
Ausgang:
*click `button2` to bind data to a data grid view*
*click `button2` to filter datatable*
id Name Address
1001 Stephan Hawking 79 Gulberg Road, Havana, Cuba
Die _newFilteredDataTable
enthält die gefilterten Daten von FilterUserDataTable
DataTable
, wobei id = 1001
. Dieser C#-Code ist im vorherigen C#-Beispiel durch Einfügen dieses button1_Click
-Ereigniscodes ausführbar.
Verwenden Sie die Select()
-Methode, um die DataTable
in C#
zu filtern
Die Methode Select()
projiziert jedes Element einer Sequenz einer DataTable
in eine neue Form. Da es zum Namespace System.Linq
gehört, ist es eine gute Nachricht für Entwickler, die gerne LINQ verwenden, um gefilterte Daten aus einer DataTable
in C# abzurufen.
Diese Methode verwendet ein Objekt als Rückgabewert und speichert alle Informationen, die zum Ausführen der Aktion erforderlich sind. Es erhält das Array von Daten von DataRow
-Objekten mit einem String-Argument, was in diesem Fall die Bedingung ist.
Sie können die Methode Select()
mit der Bedingung als Parameter verwenden, um die DataTable
abzufragen, und nachdem Sie das Ergebnis erhalten haben, können Sie es durchlaufen und die erforderlichen Felder drucken. Weisen Sie mit dem Ausdruck DataTable.Select()
Filterzeilen einem Array oder einer DataTable
zu.
Anders ausgedrückt: Die Select()
-Methode einer DataTable
akzeptiert einen Filter, sortiert im Gegenzug die Argumente und übergibt sie an ein Array von DataRow
-Objekten. Die DataRow
-Objekte, die die gefilterten DataTable
-Zeilen enthalten, bestätigen die Kriterien in einem FilterExpression
.
// `dataTable` is the targeted DataTable in a C# program which contains data
// use `Select("id > 30")` to filter the data from `dataTable` where `id` is greater than `30`
// the `filterResult` will contain the filtered information of the `dataTable`
DataRow[] filterResult = dataTable.Select("id > 30");
foreach (DataRow filterRow in filterResult) {
Console.WriteLine("ID: {0} Name: {1} Address: {2}", filterRow[0], filterRow[1], filterRow[2]);
}
Ausgang:
ID: 1003, Name: Scooby Doo, Address: 194 St. Patrick Avenue, London, UK
Beim Umgang mit riesigen Datenmengen in C# spielt DataTable
eine zentrale Rolle. Dieses Tutorial hat Ihnen drei verschiedene Methoden beigebracht, um eine DataTable
in C# zu filtern.
Die Methoden zum Filtern einer DataTable
sollten beim Abrufen und Manipulieren von Daten aus einer DataTable
optimiert und effizient sein.
Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.
GitHub