데이터 테이블에서 행 정렬
에 두 개의 열 DataTable
이 있습니다.
COL1 COL2
Abc 5
Def 8
Ghi 3
우리는이 정렬하려는 datatable
에 따라 COL2
순서를 감소한다.
COL1 COL2
ghi 8
abc 4
def 3
jkl 1
우리는 이것을 시도했다 :
ft.DefaultView.Sort = "COL2 desc";
ft = ft.DefaultView.ToTable(true);
그러나을 사용하지 않고을 제외한 자체 DataView
를 정렬하려고 DataTable
합니다 DataView
.
원하는 것처럼 들리는 것처럼 일종의 DataTable을 쉽게 수행 할 수 없습니다.
수행 할 수있는 작업은 원래 DataTable에서 만든 DataView에서 새 DataTable을 만드는 것입니다. DataView에 원하는 정렬 및 / 또는 필터를 적용한 다음 DataView.ToTable 메서드를 사용하여 DataView 에서 새 DataTable을 만듭니다 .
DataView dv = ft.DefaultView;
dv.Sort = "occr desc";
DataTable sortedDT = dv.ToTable();
이것은 당신을 도울 것입니다 ...
DataTable dt = new DataTable();
dt.DefaultView.Sort = "Column_name desc";
dt = dt.DefaultView.ToTable();
그것의 간단한 사용. 선택 기능.
DataRow[] foundRows=table.Select("Date = '1/31/1979' or OrderID = 2", "CompanyName ASC");
DataTable dt = foundRows.CopyToDataTable();
그리고 완료되었습니다 ... 해피 코딩
다음이 도움이 될 수 있습니다.
DataRow[] dataRows = table.Select().OrderBy(u => u["EmailId"]).ToArray();
여기에서 다른 Lambda 식 쿼리도 사용할 수 있습니다.
또는을 사용할 수 있으면 다음 DataGridView
과 같이 전화하십시오 Sort(column, direction)
.
namespace Sorter
{
using System;
using System.ComponentModel;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.Rows.Add("Abc", 5);
this.dataGridView1.Rows.Add("Def", 8);
this.dataGridView1.Rows.Add("Ghi", 3);
this.dataGridView1.Sort(this.dataGridView1.Columns[1],
ListSortDirection.Ascending);
}
}
}
원하는 결과를 얻을 수 있습니다.
Select(filterExpression, sortOrder)
DataTable 에서 메소드 를 사용해 보셨습니까 ? 예를 보려면 여기 를 참조 하십시오 . 이 방법은 원하는 데이터 테이블을 정렬하지 않지만 데이터보기를 사용하지 않고 정렬 된 행 배열을 반환합니다.
table.DefaultView.Sort = "[occr] DESC";
이것이 달성 될 수있는 특별한 경우가 있음이 밝혀졌습니다. 요령은 DataTable을 빌드하고 목록의 모든 행을 수집 한 후 정렬 한 다음 추가하는 것입니다. 이 사건은 여기에 나타났습니다.
정렬 데이터에는 두 가지 방법이 있습니다
1) 데이터 정렬 및 그리드 채우기 :
DataGridView datagridview1 = new DataGridView(); // for show data
DataTable dt1 = new DataTable(); // have data
DataTable dt2 = new DataTable(); // temp data table
DataRow[] dra = dt1.Select("", "ID DESC");
if (dra.Length > 0)
dt2 = dra.CopyToDataTable();
datagridview1.DataSource = dt2;
2) 그리드 열 헤더로 정렬하는 것과 같은 기본보기를 정렬하십시오.
DataGridView datagridview1 = new DataGridView(); // for show data
DataTable dt1 = new DataTable(); // have data
dt1.DefaultView.Sort = "ID DESC";
datagridview1.DataSource = dt1;
// 이것이 도움이 될 것입니다 ..
DataTable table = new DataTable();
//DataRow[] rowArray = dataTable.Select();
table = dataTable.Clone();
for (int i = dataTable.Rows.Count - 1; i >= 0; i--)
{
table.ImportRow(dataTable.Rows[i]);
}
return table;
TL; DR
tableObject.Select(queryExpression, sortOrderExpression)
정렬 된 방식으로 데이터를 선택하는 데 사용
완전한 예
Complete working example - can be tested in a console application:
using System;
using System.Data;
namespace A
{
class Program
{
static void Main(string[] args)
{
DataTable table = new DataTable("Orders");
table.Columns.Add("OrderID", typeof(Int32));
table.Columns.Add("OrderQuantity", typeof(Int32));
table.Columns.Add("CompanyName", typeof(string));
table.Columns.Add("Date", typeof(DateTime));
DataRow newRow = table.NewRow();
newRow["OrderID"] = 1;
newRow["OrderQuantity"] = 3;
newRow["CompanyName"] = "NewCompanyName";
newRow["Date"] = "1979, 1, 31";
// Add the row to the rows collection.
table.Rows.Add(newRow);
DataRow newRow2 = table.NewRow();
newRow2["OrderID"] = 2;
newRow2["OrderQuantity"] = 2;
newRow2["CompanyName"] = "NewCompanyName1";
table.Rows.Add(newRow2);
DataRow newRow3 = table.NewRow();
newRow3["OrderID"] = 3;
newRow3["OrderQuantity"] = 2;
newRow3["CompanyName"] = "NewCompanyName2";
table.Rows.Add(newRow3);
DataRow[] foundRows;
Console.WriteLine("Original table's CompanyNames");
Console.WriteLine("************************************");
foundRows = table.Select();
// Print column 0 of each returned row.
for (int i = 0; i < foundRows.Length; i++)
Console.WriteLine(foundRows[i][2]);
// Presuming the DataTable has a column named Date.
string expression = "Date = '1/31/1979' or OrderID = 2";
// string expression = "OrderQuantity = 2 and OrderID = 2";
// Sort descending by column named CompanyName.
string sortOrder = "CompanyName ASC";
Console.WriteLine("\nCompanyNames data for Date = '1/31/1979' or OrderID = 2, sorted CompanyName ASC");
Console.WriteLine("************************************");
// Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression, sortOrder);
// Print column 0 of each returned row.
for (int i = 0; i < foundRows.Length; i++)
Console.WriteLine(foundRows[i][2]);
Console.ReadKey();
}
}
}
Output
try this:
DataTable DT = new DataTable();
DataTable sortedDT = DT;
sortedDT.Clear();
foreach (DataRow row in DT.Select("", "DiffTotal desc"))
{
sortedDT.NewRow();
sortedDT.Rows.Add(row);
}
DT = sortedDT;
참고URL : https://stackoverflow.com/questions/9107916/sorting-rows-in-a-data-table
'IT story' 카테고리의 다른 글
중복 된 행 제거 (0) | 2020.06.27 |
---|---|
jQuery 체크 박스 이벤트 처리 (0) | 2020.06.27 |
Java에서 다른 사람의 나이를 어떻게 계산합니까? (0) | 2020.06.27 |
파이썬이 설치된 곳을 찾으십시오 (기본 디렉토리가 아닌 경우) (0) | 2020.06.27 |
“android.app.Application을 전송할 수 없습니다”로 사용자 정의 전역 응용 프로그램 클래스가 중단됨 (0) | 2020.06.27 |