Exemplo n.º 1
0
        private static void SendSalesOrderDetail(ADOM9Dataset.SalesOrderDetailRow Row)
        {
            int send_rows = 0;
            //Calculamos porque una vez lancemos update perdemos visibilidad del cambio
            bool deletion = Row.RowState == DataRowState.Deleted;

            //Ambito de using grande por si debemos usar adaptador en concurrency exception
            using (SalesOrderDetailTableAdapter OrderDetailTabAdpt = new SalesOrderDetailTableAdapter())
            {
                try
                {
                    send_rows = OrderDetailTabAdpt.Update(Row);
                    Console.WriteLine("Registros OrderDetail enviados: {0}", send_rows);
                    ReSyncLocalData(OrderDetailTabAdpt, Row.SalesOrderID, deletion);
                }
                catch (DBConcurrencyException e)
                {
                    Console.WriteLine("ERROR de concurrencia. Detalle: {0}", e.Message);

                    Console.WriteLine("Marque X si desea resincronizar con BD: ");
                    if (Console.ReadLine().ToLower() == "x")
                    {
                        ReSyncLocalData(OrderDetailTabAdpt, Row.SalesOrderID, deletion);
                    }
                    ;
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR desconocido. Detalle: {0}", e.Message);
                }
            }
        }
Exemplo n.º 2
0
        private static void ReSyncLocalData(SalesOrderDetailTableAdapter MainAdapter, int HeaderID, bool deletion)
        {
            int DetailReceived_rows = 0;
            int HeaderReceived_rows = 0;

            HeaderReceived_rows = MainAdapter.FillBySalesOrderID(DataADO.SalesOrderDetail, HeaderID);
            Console.WriteLine("Registros OrderHeader recibidos (resync): {0}", HeaderReceived_rows);

            using (SalesOrderHeaderTableAdapter SecondaryAdapter = new SalesOrderHeaderTableAdapter())
            {
                DetailReceived_rows = deletion ?
                                      SecondaryAdapter.Fill(DataADO.SalesOrderHeader) :
                                      SecondaryAdapter.FillBySalesOrderID(DataADO.SalesOrderHeader, HeaderID);
            }

            Console.WriteLine("Registros OrderHeader recibidos (resync): {0}", DetailReceived_rows);
        }
Exemplo n.º 3
0
        private static void ADOShowAndManageQuoteDetails(int OrdHeaderID)
        {
            bool next_opt = true;

            ADOM9Dataset.SalesOrderDetailRow [] RelatedOrderDetails;
            ADOM9Dataset.SalesOrderHeaderRow    HeaderRow;

            //Optimización, no hace falta traer todo. Lo integramos al preguntar

            //if(DataADO.SalesOrderDetail.Rows.Count == 0)
            //{
            //    using (SalesOrderDetailTableAdapter OrderDetailTabAdpt = new SalesOrderDetailTableAdapter())
            //    {
            //        OrderDetailTabAdpt.Fill(DataADO.SalesOrderDetail);
            //    }
            //}

            do
            {
                //Recuperamos cabecera y mostramos información de sus detalles
                HeaderRow = DataADO.SalesOrderHeader.FindBySalesOrderID(OrdHeaderID);

                Console.WriteLine("Información de detalle asociado a la cabecera escogida (ID {0} - Total acumulado {1})", OrdHeaderID, HeaderRow.TotalDue);

                //Recuperamos de BD los Order Details asociados y los buscamos a partir del Header para mostrar y seleccionar en métodos posteriores
                //Siempre encontraremos, aunque un no esta de mas controlar excepción por fallo de conexión
                //IMPORTANTE: Recalculamos a cada iteración puesto que se reinstancian los objetos al pasar por FILL...
                try
                {
                    using (SalesOrderDetailTableAdapter OrderDetailTblAdpt = new SalesOrderDetailTableAdapter())
                    {
                        OrderDetailTblAdpt.FillBySalesOrderID(DataADO.SalesOrderDetail, OrdHeaderID);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR recuperando OrderDetails del Header seleccionado. Detalles {0}", e.Message);
                    return;
                }

                RelatedOrderDetails = HeaderRow.GetSalesOrderDetailRows();

                foreach (ADOM9Dataset.SalesOrderDetailRow OrderDetailRow in RelatedOrderDetails)
                {
                    Console.WriteLine("ID: {0}" +
                                      "\n\t- Producto: {1} " +
                                      "\n\t- Cantidad: {2} " +
                                      "\n\t- Importe unitario: {3} ",
                                      OrderDetailRow.SalesOrderDetailID,
                                      OrderDetailRow.ProductID,
                                      OrderDetailRow.OrderQty,
                                      OrderDetailRow.UnitPrice);
                }

                switch (ManageOrderDetailMenu())
                {
                case 0:
                    next_opt = false;
                    break;

                case 1:
                    ADOEditQuantityQuoteDetail(RelatedOrderDetails);
                    break;

                case 2:
                    ADOEditUnitCostQuoteDetail(RelatedOrderDetails);
                    break;

                case 3:
                    ADODeleteQuoteDetail(RelatedOrderDetails);
                    break;

                case 4:
                    ADOAddQuoteDetail(OrdHeaderID);
                    break;

                default:
                    Console.WriteLine("\n--- ERROR: Opción incorrecta. Reintentelo --\n");
                    break;
                }
            }while (next_opt);
        }