#region 獲取對固定列不重復的新DataTable /// <summary> /// 獲取對固定列不重復的新DataTable /// </summary> /// <param name="dt">含有重復數據的DataTable</param> /// <param name="colName">需要驗證重復的列名</param> /// <returns>新的DataTable,colName列不重復,表格式保持不變</returns> private DataTable GetDistinctTable(DataTable dt, string colName) { if (dt.Rows.Count == 0 || dt.Rows.Count == 1) { WriteFile("GetDistinctTable傳入dt的行數小於等於1" + "\r\n", logName, out outMessage); return dt; } DataView dv = dt.DefaultView; //dv過濾dv中的重復列名 DataTable dtCardNo = dv.ToTable(true, colName); DataTable Pointdt = new DataTable(); //ToTable()根據現有 DataView 中的行,創建並返回一個新的 DataTable。 //輸出表與輸入表包含相同的列 Pointdt = dv.ToTable(); Pointdt.Clear(); for (int i = 0; i < dtCardNo.Rows.Count; i++) { try { //dr取的是Select返回的DataRow[]中的第一條數據 //如果dtCardNo.Rows[i][0].ToString()中沒有值會報數組超出索引界限的錯誤 if (!string.IsNullOrEmpty(dtCardNo.Rows[i][0].ToString())) { DataRow dr = dt.Select(colName + "='" + dtCardNo.Rows[i][0].ToString() + "'")[0]; //DataRow.ItemArray通過一個數組來獲取或設置此行的所有值 Pointdt.Rows.Add(dr.ItemArray); } } catch (Exception ee) { //可以將錯誤寫入日志文件 } } return Pointdt; } #endregion