C#에서 DataTable 필터링
-
DataView.RowFilter
속성을 사용하여C#
에서DataTable
필터링 -
CopyToDataTable()
메서드를 사용하여C#
에서DataTable
필터링 -
Select()
메서드를 사용하여C#
에서DataTable
필터링
.NET Framework의 DataView
는 C#에서 DataTable
의 사용자 지정 보기를 나타내는 필터링을 위한 databindtable
을 나타냅니다. DataTable
(DataView
가 동기화되거나 연결됨)에는 필터링이 필요한 데이터가 포함되어 있습니다.
DataView
는 데이터를 저장할 수 없으며 해당 DataTable
의 데이터만 나타냅니다. DataView
에서 수행된 모든 계산은 DataTable
에 영향을 미칩니다.
또한 DataTable의 데이터를 변경하거나 수정하면 관련되거나 연결된 모든 DataViews
에 영향을 미칩니다.
DataView
클래스는 C#의 System.Data
네임스페이스에 있습니다. 이 자습서에서는 C#에서 DataTable
을 필터링하는 세 가지 기본 방법을 알려줍니다.
DataView.RowFilter
속성, CopytoDataTable()
및 Select()
메서드는 C#에서 DataTable
을 필터링하는 몇 가지 기본 방법입니다. 필터링은 데이터가 커지고 높은 수준의 조작이 필요하기 때문에 모든 C# 애플리케이션의 공통 요구 사항입니다.
DataView.RowFilter
속성을 사용하여 C#
에서 DataTable
필터링
DataView.RowFilter
속성은 C#에서 DataTable
을 필터링할 때 매우 생산적입니다. 이를 통해 DataView
와 관련된 데이터를 가져오거나 설정할 수 있으며 각 DataTable
에서 데이터를 필터링할 수 있는 개별 DataView
개체를 정의하는 데 도움이 됩니다.
RowFilter
속성은 행을 필터링하는 방법을 지정하는 문자열을 나타내며 해당 문자열의 값 데이터 유형은 System.String
입니다. RowFilter
값을 username = "aUsername"
으로 할당하고 DataView
행을 필터링하여 필터링된 데이터를 C# 애플리케이션에서 프로그래밍 방식으로 표시할 수 있습니다.
RowFilter
속성의 가장 흥미로운 점은 DataView가 동적 보기를 제공하는 기본 DataTable
의 데이터를 변경/필터링하는 기능입니다. DataView의 동적 및 데이터 바인딩 기능은 데이터 바인딩 C# 애플리케이션에 이상적입니다.
DataTable
에서 제공하는 보기와 마찬가지로 C#의 DataView
는 단일 데이터 세트를 동적으로 나타낼 수 있으므로 다양한 필터를 수행할 수 있습니다. RowFilter
속성을 DataView
에 적용할 수 있습니다. 그러면 필터 식 또는 기준과 일치하지 않는 관련 DataTable
개체 행 컬렉션의 불필요한 모든 데이터가 숨겨집니다.
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;
}
}
}
출력:
*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
CreateTable()
메서드는 id
, name
및 address
열을 포함하는 FilterUserDataTable
데이터 테이블을 생성합니다. button2
버튼은 이 DataTable
의 데이터를 dataGridView1
에 바인딩할 수 있습니다.
button1
을 눌러 DataTable
을 필터링하고 필터링된 결과를 dataGridView1
에 표시합니다.
CopyToDataTable()
메서드를 사용하여 C#
에서 DataTable
필터링
DataTable
을 필터링하고 DataView
가 아닌 새 DataTable
에서 결과를 반환할 수 있습니다. 결과적으로 새 DataTable
에는 입력 IEnumberable<T>
개체가 지정된 DataRow
개체의 복사본이 포함됩니다.
DataTable
의 소스 IEnumerable<T>
는 null
일 수 없습니다. 그렇지 않으면 새 DataTable
을 생성할 수 없습니다. 쿼리를 기반으로 DataTable
을 선택하고 DataGridView
의 프록시 역할을 하는 BindingSource
에 바인딩된 새 항목에 콘텐츠를 복사합니다.
private void button1_Click(object sender, EventArgs e) {
DataTable _newFilteredDataTable =
dtSet.Tables["FilterUserDataTable"].Select("id = 1001").CopyToDataTable();
dataGridView1.DataSource = _newFilteredDataTable;
}
출력:
*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
_newFilteredDataTable
은 FilterUserDataTable
DataTable
(여기서 id = 1001
)의 필터링된 데이터를 보유합니다. 이 C# 코드는 이 button1_Click
이벤트 코드를 붙여넣어 이전 C# 예제에서 실행 가능합니다.
Select()
메서드를 사용하여 C#
에서 DataTable
필터링
Select()
메서드는 DataTable
시퀀스의 각 요소를 새 형식으로 투영합니다. 이는 System.Linq
네임스페이스에 속하므로 LINQ를 사용하여 C#의 DataTable
에서 필터링된 데이터를 검색하는 개발자에게 희소식입니다.
이 메서드는 개체를 반환 값으로 사용하고 작업을 수행하는 데 필요한 모든 정보를 저장합니다. 이 경우 조건인 하나의 문자열 인수를 사용하여 DataRow
개체의 데이터 배열을 가져옵니다.
조건과 함께 Select()
메서드를 매개 변수로 사용하여 DataTable
을 쿼리하고 결과를 얻은 후 반복하여 필요한 필드를 인쇄할 수 있습니다. DataTable.Select()
식을 사용하여 배열 또는 DataTable
에 필터 행을 할당합니다.
즉, DataTable
의 Select()
메서드는 필터를 수락하고 반환되는 인수를 정렬한 다음 DataRow
개체의 배열로 전송합니다. 필터링된 DataTable
행을 포함하는 DataRow
객체는 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]);
}
출력:
ID: 1003, Name: Scooby Doo, Address: 194 St. Patrick Avenue, London, UK
C#에서 방대한 양의 데이터를 처리할 때 DataTable
은 중추적인 역할을 합니다. 이 자습서에서는 C#에서 DataTable
을 필터링하는 세 가지 방법을 설명했습니다.
DataTable
필터링 방법은 DataTable
에서 데이터를 가져오고 조작할 때 최적화되고 효율적이어야 합니다.
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