/// <summary> /// 将DataTable按起始位置和移动及移动方向进行移动并返回新的DataTable /// </summary> /// <param name="dt">要移动的DataTable</param> /// <param name="StartRow">要移动的行(索引从1开始)</param> /// <param name="MoveCount">要移动的行数</param> /// <param name="MoveUp">是否上移(true为上移false为下移)</param> /// <returns>将移动完成后的DataTable返回,如果移动有误的话将返回原Table</returns> public DataTable GetNewTable(DataTable dt, int StartRow, int MoveCount, bool MoveUp) { #region 将DataTable按起始位置和移动及移动方向进行移动并返回新的DataTable DataRow dr = dt.NewRow(); dr.ItemArray = dt.Rows[StartRow - 1].ItemArray; int RowCount = dt.Rows.Count; if (StartRow > RowCount)//移动的行在行数外面 return dt; if (MoveUp)//上移 { if(StartRow - MoveCount <= 0){ } else { for (int i = 0; i < MoveCount; i++) dt.Rows[StartRow - i - 1].ItemArray = dt.Rows[StartRow - i - 2].ItemArray; dt.Rows[StartRow - MoveCount - 1].ItemArray = dr.ItemArray; } } else//下移 { if(StartRow + MoveCount > RowCount){ } else { for (int i = 0; i < MoveCount; i++) dt.Rows[StartRow + i - 1].ItemArray = dt.Rows[StartRow + i].ItemArray; dt.Rows[StartRow + MoveCount - 1].ItemArray = dr.ItemArray; } } return dt; #endregion } 这是移动DataTable的方法 /// <summary> /// 根据条件过滤表 /// </summary> /// <param name="dt">未过滤之前的表</param> /// <param name="filter">过滤条件</param> /// <returns>返回过滤后的表</returns> public DataTable GetNewTable(DataTable dt, string filter) { #region 根据条件过滤表 DataTable newTable = dt.Clone(); DataRow[] drs = dt.Select(filter); foreach (DataRow dr in drs) { object[] arr = dr.ItemArray; DataRow newrow = newTable.NewRow(); for (int i = 0; i < arr.Length; i++) newrow[i] = arr[i]; newTable.Rows.Add(newrow); } return newTable; #endregion } 根据DataTble和查询条件进行过滤