Filtrar un DataTable en C#
-
Utilice la propiedad
DataView.RowFilter
para filtrar laTabla de datos
enC#
-
Utilice el método
CopyToDataTable()
para filtrar laTabla de datos
enC#
-
Utilice el método
Select()
para filtrar laTabla de datos
enC#
El DataView
de .NET Framework representa un databindtable
para filtrar, que representa una vista personalizada de un DataTable
en C#. El DataTable
(el DataView
está sincronizado o conectado) contiene datos que requieren filtrado.
Un DataView
no puede almacenar datos y solo representa datos de su correspondiente DataTable
. Cualquier cálculo realizado en un DataView
afecta a la DataTable
.
Además, cambiar o modificar los datos de un DataTable afectará a todos sus DataViews
asociados o conectados.
La clase DataView
existe en el espacio de nombres System.Data
en C#. Este tutorial le enseñará los tres métodos principales para filtrar una Tabla de datos
en C#.
La propiedad DataView.RowFilter
, los métodos CopytoDataTable()
y Select()
son algunas de las principales formas de filtrar una DataTable
en C#. El filtrado es un requisito común para todas las aplicaciones de C# porque los datos son cada vez más grandes y requieren una manipulación de alto nivel.
Utilice la propiedad DataView.RowFilter
para filtrar la Tabla de datos
en C#
La propiedad DataView.RowFilter
es extremadamente productiva al filtrar un DataTable
en C#. Le permite obtener o establecer los datos asociados con un DataView
y le ayuda a definir los objetos individuales de DataView
que pueden filtrar los datos en cada DataTable
.
La propiedad RowFilter
representa una cadena que especifica cómo se filtrarán las filas, y el tipo de datos de valor de esa cadena es System.String
. Puede asignar un valor RowFilter
como username = "aUsername"
y filtrar las filas de DataView
para mostrar los datos filtrados mediante programación en una aplicación C#.
Lo más interesante de la propiedad RowFilter
es su capacidad para cambiar/filtrar datos de DataTable
subyacente, de los cuales un DataView proporciona una vista dinámica. Las capacidades dinámicas y de enlace de datos de DataView lo hacen ideal para aplicaciones C# de enlace de datos.
Similar a la vista proporcionada por un DataTable
, un DataView
en C# puede representar dinámicamente un solo conjunto de datos, lo que le permite realizar diferentes filtros. Puede aplicar la propiedad RowFilter
a un DataView
, que ocultará todos los datos innecesarios de la colección de filas de su objeto DataTable
asociado que no coincida con la expresión o el criterio del filtro.
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;
}
}
}
Producción :
*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
El método CreateTable()
crea una tabla de datos FilterUserDataTable
que contiene las columnas id
, name
y address
. El botón button2
puede vincular los datos de este DataTable
a dataGridView1
.
Presiona button1
para filtrar el DataTable
y mostrar los resultados filtrados en el dataGridView1
.
Utilice el método CopyToDataTable()
para filtrar la Tabla de datos
en C#
Puede filtrar una Tabla de datos
y devolver los resultados en una nueva Tabla de datos
en lugar de una Vista de datos
. Una nueva DataTable
, como resultado, contiene copias de un objeto DataRow
, dado un objeto de entrada IEnumberable<T>
.
La fuente IEnumerable<T>
de la DataTable
no puede ser null
; de lo contrario, no se podrá crear la nueva Tabla de datos
. Se basa en una consulta para seleccionar un DataTable
y copiar su contenido en uno nuevo vinculado a BindingSource
, que actúa como proxy para DataGridView
.
private void button1_Click(object sender, EventArgs e) {
DataTable _newFilteredDataTable =
dtSet.Tables["FilterUserDataTable"].Select("id = 1001").CopyToDataTable();
dataGridView1.DataSource = _newFilteredDataTable;
}
Producción :
*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
El _newFilteredDataTable
contendrá los datos filtrados de FilterUserDataTable
DataTable
donde id = 1001
. Este código C# es ejecutable en el ejemplo anterior de C# pegando este código de evento button1_Click
.
Utilice el método Select()
para filtrar la Tabla de datos
en C#
El método Select()
proyecta cada elemento de una secuencia de un DataTable
en un nuevo formulario. Como pertenece al espacio de nombres System.Linq
, es una gran noticia para los desarrolladores que disfrutan usando LINQ para recuperar datos filtrados de un DataTable
en C#.
Este método utiliza un objeto como valor de retorno y almacena toda la información necesaria para realizar la acción. Obtiene la matriz de datos de los objetos DataRow
utilizando un argumento de cadena, que es la condición en este caso.
Puede usar el método Select()
con la condición como parámetro para consultar la Tabla de datos
, y después de obtener el resultado, puede recorrerlo e imprimir los campos requeridos. Asigne filas de filtro a una matriz o DataTable
utilizando la expresión DataTable.Select()
.
En otras palabras, el método Select()
de una DataTable
acepta un filtro, ordena los argumentos a cambio y los transfiere a una matriz de objetos DataRow
. Los objetos DataRow
que contienen las filas filtradas de DataTable
confirman los criterios en una 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]);
}
Producción :
ID: 1003, Name: Scooby Doo, Address: 194 St. Patrick Avenue, London, UK
Cuando se trata de una gran cantidad de datos en C#, DataTable
juega un papel fundamental. Este tutorial le ha enseñado tres métodos diferentes para filtrar una Tabla de datos
en C#.
Los métodos de filtrado de una Tabla de datos
deben optimizarse y ser eficientes en la obtención y manipulación de datos de una Tabla de datos
.
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