一、在DataTable中查找
1. 使用Select方法查找沒有主鍵的表
DataTable的Select方法返回一個DataRow數組,有四個重載的函數。
DataRow[] drs = dt.Select("UserName LIKE '張%'");
2. 使用Find方法查找有主鍵的表
分兩種情況:
(1) 主鍵只有一個字段
DataRow dr = dt.Rows.Find("主鍵字段的值");
dt.PrimaryKey = new DataColumn[] { dt.Columns["Id"] };
dt.PrimaryKey= new DataColumn[] { dt_smartgrid.Columns["A"], dt_smartgrid.Columns["B"] };
(2) 主鍵有多個字段
例如,表的主鍵由一個整型字段ID和一個字符類型自動Name組成,以下代碼查找滿足ID=10且Name="張三"條件的記錄。
Object[] objs = new Object[]{10,"張三"};
dr = dt.Rows.Find(objs);
二、使用DataView篩選數據
DataView可以看成DataTable中的記錄加上某種條件后得到的數據。DataView依附於DataTable,每個DataTable都至少有一個DataView。數據綁定中控件綁定到的其實不是DataTable,而是DataTable的DefaultView。
DataView常用的數據篩選方法有:
1. 篩選特定狀態的行
以下代碼找出所有新加的行:
dv.RowStateFilter = DataViewRowState.Added;
2. 使用Sort屬性,可以指定單個或多個列進行排序,如:
dv.Sort = "Name ASC,ID DESC";
3. 使用RowFilter屬性動態篩選記錄。
dv.RowFilter = "Name LIKE '張%'";
4. 使用Find和FindRows在DataView中查找。
使用這兩個方法,是按照行的排序關鍵字值來對行進行搜索的。
Find方法返回一個整數,表示匹配搜索條件的DataRowView的索引。如果多行匹配,只返回一個匹配行索引,如果未找到匹配項,返回-1。
若要返回匹配多個行的搜索結果,可以使用FindRows方法。它返回DataView中的所有匹配行的DataRowView數組。如果未找到匹配項,DataRowView數組為空。
若要使用Find或FindRows方法,必須通過將ApplyDefaultSort設置為true或通過使用DataView對象的Sort屬性來指定排序順序,否則將引發異常。這兩種方法將一個值數組用做輸入,該數組的長度與排序順序包含的列數相匹配。當對多個列進行排序時,對象數組的值必須匹配在DataView的Sort屬性中指定的列的順序。
對具有單個列排序順序的DataView調用Find方法。
dv.Sort = "Name";
int rowIndex = dv.Find("張三");
如果Sort屬性指定多個列,則必須按照Sort屬性指定的順序為每個列傳遞包含搜索值的對象數組。
dv.Sort = "Name,ID";
DataRowView[] foundRows = dv.FindRows(new Object[]{"張%","001"});
