DataTable myTable = GetData(); //your custom function DataTable dtSubHierarchy = Utils.DataTable.GetSubHierarchy(myTable, 8, "ID", "PID", "SortOrder");
public static DataTable GetSubHierarchy(DataTable pdtSource, int pIDValue, string pIDColumn, string pPIDColumn, string pSortColumn) { DataTable dtResult = pdtSource.Clone(); pdtSource.PrimaryKey = new DataColumn[] { pdtSource.Columns[pIDColumn] }; DataRow drCurrent = pdtSource.Rows.Find(pIDValue); if (drCurrent != null) { dtResult.Rows.Add(drCurrent.ItemArray); DataView dv = new DataView(pdtSource); dv.RowFilter = pPIDColumn + " = " + pIDValue; dv.Sort = pSortColumn; foreach (DataRowView drv in dv) { dtResult.Rows.Add(drv.Row.ItemArray); int currentID = (int)drv[pIDColumn]; GetSubHierarchyHelper(pdtSource, ref dtResult, currentID, pIDColumn, pPIDColumn, pSortColumn); } } return dtResult; } private static void GetSubHierarchyHelper(DataTable pdtSource, ref DataTable pdtResult, int pIDValue, string pIDColumn, string pPIDColumn, string pSortColumn) { DataView dv = new DataView(pdtSource); dv.RowFilter = pPIDColumn + " = " + pIDValue; dv.Sort = pSortColumn; foreach (DataRowView drv in dv) { pdtResult.Rows.Add(drv.Row.ItemArray); int currentID = (int)drv[pIDColumn]; GetSubHierarchyHelper(pdtSource, ref pdtResult, currentID, pIDColumn, pPIDColumn, pSortColumn); } }
If you have a computer, you are managing links
Manylink allows you to :