2012-12-27 84 views
7

Tôi có một cột có thể định sẵn với các cột có tên foldername, documentname. Dữ liệu như sau:Sắp xếp bảng dữ liệu theo nhiều cột bằng cách sử dụng C#

FolderName DocumentName 
Folder1  HR[D] Document 
Folder1  ___----' 
Folder1  Asp_example.pdf 
Folder2  SD 
Folder3  Heavy_weight 
Folder3  Accesorial Services 

Làm thế nào để alphabetically loại DocumentName dựa trên FolderName trong .Net Framework 2.0.

Giải pháp mà chúng tôi đã thử dưới đây nhưng mất quá nhiều thời gian vì nó chứa hơn 1200000 bản ghi.

int counter=0; 

while (counter < searchDT.Rows.Count){ 
    string FolderName = Convert.ToString(searchDT.Rows[counter]["Folder Name"]); 

    string exp = "[Folder Name] like '" + FolderName + "'"; 

    if (FolderName.Contains("%") || FolderName.Contains("_") || FolderName.Contains("[]") ||  FolderName.Contains("'")) 

     exp = "[Folder Name] like '" + EscapeLikeValue(FolderName) + "'"; 

    string sortExpression = "[Document Name] ASC"; 

    DataRow[] drfoldername = searchDT.Select(exp, sortExpression); 

    foreach (DataRow row in drfoldername) 
    drfoldernameDT.ImportRow(row); 

    counter += drfoldername.Length; 

} 
+1

Bạn đề cập đến thông tin này được lấy từ cơ sở dữ liệu vậy tại sao bạn không làm mệnh đề ORDER BY trong truy vấn SQL? Nếu không, bạn đã thử sử dụng một DataView chứ không phải là một DataTable? –

Trả lời

2

Bạn đã thử DataView.Sort chưa?

dt.DefaultView.RowFilter = "FolderName , DocumentName ASC"; 
dt = dt.DefaultView.ToTable(); 
+0

Nó đưa ra một lỗi, nhưng bên dưới câu trả lời đã lưu tôi. cảm ơn – user1931665

38
 DataTable dt= new DataTable(); 

     DataView dv = new DataView(dt); 
     dv.Sort = "FolderName, DocumentName ASC"; 

Cố gắng mà ra. Nó sẽ sắp xếp đầu tiên cho FolderName, sau đó DocumentName.

Nếu bạn cần gửi điều đó đến một thành phần trong màn hình, bạn có thể làm tương tự như bạn đang làm với một DataTable.

+0

Cảm ơn rất nhiều, nó đã hoạt động. Đối với một dòng mã hóa đơn giản, tôi đã viết một mã ngu ngốc mã số – user1931665

+1

Đừng quên upvote và đánh dấu là câu trả lời đúng. Điều đó ước tính chúng ta giúp đỡ nhiều hơn và nhiều hơn nữa. –

+0

stange ans này là hữu ích cho OP bt vẫn havnt được đánh dấu là asnwer – Neel

0

Nếu bạn đang ràng buộc DGV sử dụng một DataTable, bạn có thể sử dụng làm điều gì đó như:

DataTable dtable = (DataTable) dgv.DataSource; dtable.DefaultView.Sort =

Ngoài ra kiểm tra này:

http://www.codeproject.com/csharp/datagridsort.asp

nhờ

1

Đây là giải pháp của tôi cho vấn đề này:

Datatable FI = new Datatable(); 
DataView viewFI = new DataView(FI); 
viewFI.Sort = "ServiceDate, ServiceRoute"; 
DataTable OFI= viewFI.ToTable(); 
0

Bạn có thể sử dụng

oDataSet.Tables[0].DefaultView.Sort = "Column1 ASC "; 
Các vấn đề liên quan