internal static void DeleteTree(TableResolver resolver, DbTreeDefinition tree, string id, IInputData inputData) { TkDebug.AssertArgumentNull(resolver, "resolver", null); TkDebug.AssertArgumentNull(tree, "tree", null); TkDebug.AssertArgumentNullOrEmpty(id, "id", null); DataRow row = null; if (resolver.HostTable != null) { row = resolver.HostTable.Select(string.Format(ObjectUtil.SysCulture, "{0} = '{1}'", tree.IdField, id))[0]; } else { row = resolver.SelectRowWithParam(tree.IdField, id); } resolver.SetCommands(AdapterCommand.Update | AdapterCommand.Delete); DataTable table = resolver.HostTable; int currentCount = table.Rows.Count; IFieldInfo layerField = resolver.GetFieldInfo(tree.LayerField); IParamBuilder builder = CreateLayerParamBuilder(resolver.Context, layerField, row[tree.LayerField].ToString()); resolver.Select(builder); for (int i = currentCount; i < table.Rows.Count; ++i) { DataRow delRow = table.Rows[i]; resolver.DeleteRow(delRow, UpdateKind.Delete, null, inputData); } SetParentLeaf(resolver, tree, row[tree.ParentIdField].ToString()); resolver.DeleteRow(row, UpdateKind.Delete, null, inputData); }