¿Cómo puedo filtrar una tabla de datos?

Uso DataTable con información sobre usuarios y deseo buscar un usuario o una lista de usuarios en esta DataTable. Lo bash pero no funciona 🙁

Aquí está mi código c #:

public DataTable GetEntriesBySearch(string username,string location,DataTable table) { list = null; list = table; string expression; string sortOrder; expression = "Nachname = 'test'"; sortOrder = "nachname DESC"; DataRow[] rows = list.Select(expression, sortOrder); list = null; // for testing list = new DataTable(); // for testing foreach (DataRow row in rows) { list.ImportRow(row); } return list; } 

Puedes usar DataView.

 DataView dv = new DataView(yourDatatable); dv.RowFilter = "query"; // query example = "id = 10" 

http://www.csharp-examples.net/dataview-rowfilter/

Si está utilizando al menos .NET 3.5, sugeriría utilizar Linq-To-DataTable lugar, ya que es mucho más legible y potente:

 DataTable tblFiltered = table.AsEnumerable() .Where(row => row.Field("Nachname") == username && row.Field("Ort") == location) .OrderByDescending(row => row.Field("Nachname")) .CopyToDataTable(); 

El código anterior es solo un ejemplo, en realidad tiene muchos más métodos disponibles .

Recuerde agregar using System.Linq; y para el método de extensión AsEnumerable , una referencia a System.Data.DataSetExtensions dll ( How ).

claro:

 list = null; // for testing list = new DataTable(); // for testing foreach (DataRow row in rows) { list.ImportRow(row); } 

utilizar:

 .CopyToDataTable() 

ejemplo:

 string _sqlWhere = "Nachname = 'test'"; string _sqlOrder = "Nachname DESC"; DataTable _newDataTable = yurDateTable.Select(_sqlWhere, _sqlOrder).CopyToDataTable(); 

Para cualquiera que trabaje en VB.NET (por si acaso)

 Dim dv As DataView = yourDatatable.DefaultView dv.RowFilter ="query" ' ex: "parentid = 0" 

Es mejor usar DataView para esta tarea.

Ejemplo del uso que puedes encontrar en esta publicación: Cómo filtrar datos en dataview

A veces, realmente desea devolver una DataTable que una DataView. Entonces, un DataView no era bueno en mi caso y creo que pocos querrían eso también. Esto es lo que solía hacer

myDataTable.select (“myquery”). CopyToDataTable ()

Esto filtrará myDataTable que es una DataTable y devolverá una nueva DataTable

Espero que alguien encuentre que es útil

Hola, podemos usar el Método ToLower a veces no es un filtro.

 EmployeeId = Session["EmployeeID"].ToString(); var rows = dtCrewList.AsEnumerable().Where (row => row.Field("EmployeeId").ToLower()== EmployeeId.ToLower()); if (rows.Any()) { tblFiltered = rows.CopyToDataTable(); }