public FormAmRecorrido(int IDRecorrido, FormRecorrido fr)
        {
            InitializeComponent();
            this.IDRecorrido = IDRecorrido;
            dgv_tramos.EditingControlShowing += dgv_tramos_EditingControlShowing;
            dgv_tramos.CellValidating        += dgv_tramos_CellValidating;
            dgv_tramos.CellEndEdit           += dgv_tramos_CellEndEdit;
            //Cargar Puerto Desde
            CargarComboPuertoSalida();
            //Cargar Puerto Hasta
            CargarComboPuertoDestino();

            if (IDRecorrido != null || IDRecorrido != 0)
            {
                //Modificar
                Recorrido recorrido = new Recorrido();

                //Obtener recorrido
                SqlDataReader reader = RecorridoFunc.ObtenerRecorrido(IDRecorrido);

                recorrido = RecorridoFunc.ObtenerRecorridoDesdeUnReader(reader);


                //Llenar textos
                txt_id.Text = recorrido.rec_id.ToString();
                //cmb_puertoDestino.SelectedIndex = cmb_puertoDestino.SelectedIndex.Equals(recorrido.rec_pue_desde);
                //cmb_puertoSalida.SelectedIndex = PuertoFunc.ObtenerNombre(recorrido.rec_pue_hasta);


                DataTable tramo = RecorridoFunc.ObtenerTramos(this.IDRecorrido);

                //Se carga combo Tipo Cabina de la fila
                //CargarComboTipoCabina();

                this.cantTramos = tramo.Rows.Count;
                //Se agragan las filas necesarias
                for (Int32 j = 0; j < tramo.Rows.Count; j++)
                {
                    DataGridViewRow rowTram = (DataGridViewRow)dgv_tramos.Rows[0].Clone();
                    dgv_tramos.Rows.Add(rowTram);
                }


                //Se agregan los datos en las filas
                for (Int32 i = 0; i < tramo.Rows.Count; i++)
                {
                    dgv_tramos.Rows[i].Cells[0].Value = tramo.Rows[i]["tra_desde"].ToString().Trim();
                    dgv_tramos.Rows[i].Cells[1].Value = tramo.Rows[i]["tra_hasta"].ToString().Trim();
                    dgv_tramos.Rows[i].Cells[2].Value = tramo.Rows[i]["tra_precio_base"].ToString();
                    dgv_tramos.Rows[i].Cells[3].Value = tramo.Rows[i]["tra_id"].ToString();
                }

                this.recorridoModificado.rec_id        = recorrido.rec_id;
                this.recorridoModificado.rec_pue_desde = recorrido.rec_pue_desde.Trim();
                this.recorridoModificado.rec_pue_hasta = recorrido.rec_pue_hasta.Trim();
                this.recorridoModificado.rec_estado    = recorrido.rec_estado;

                //Dejar identificación como grisado
                txt_id.ReadOnly = true;
            }
            else
            {
                txt_id.Text = "00000000";
            }
        }
        public FormAmRecorrido(String IDRecorrido, FormRecorrido fr)
        {
            InitializeComponent();
            this.IDRecorrido = IDRecorrido;
            dgv_tramos.EditingControlShowing += dgv_tramos_EditingControlShowing;
            dgv_tramos.CellValidating        += dgv_tramos_CellValidating;
            dgv_tramos.CellEndEdit           += dgv_tramos_CellEndEdit;
            dgv_tramos.AllowUserToAddRows     = false;

            txt_id.ReadOnly = true;
            dgv_tramos.Columns["colId"].Visible = false;

            if (!String.IsNullOrEmpty(IDRecorrido))
            {
                this.esModificar = true;
                //Modificar
                Recorrido recorrido = new Recorrido();

                //Obtener recorrido
                SqlDataReader reader = RecorridoFunc.ObtenerRecorrido(IDRecorrido);

                recorrido = RecorridoFunc.ObtenerRecorridoDesdeUnReader(reader);

                //Llenar textos
                txt_id.Text = recorrido.rec_id.ToString();
                //cmb_puertoDestino.SelectedIndex = cmb_puertoDestino.SelectedIndex.Equals(recorrido.rec_pue_desde);
                //cmb_puertoSalida.SelectedIndex = PuertoFunc.ObtenerNombre(recorrido.rec_pue_hasta);


                DataTable tramo = TramoFunc.ObtenerTramos(this.IDRecorrido);

                //Se carga combo Tipo Cabina de la fila
                dgv_tramos.Rows.Add();
                CargarComboPuertoSalida();
                CargarComboPuertoDestino();

                this.cantTramos = tramo.Rows.Count;
                //Se agragan las filas necesarias
                for (Int32 j = 0; j < this.cantTramos; j++)
                {
                    DataGridViewRow rowTram = (DataGridViewRow)dgv_tramos.Rows[0].Clone();
                    dgv_tramos.Rows.Add(rowTram);
                }

                Queue <Tramo> tramosList = new Queue <Tramo>();
                //Se agregan los datos en las filas
                Tramo tramo_inicial = new Tramo();
                int   cont;
                for (cont = 0; true; cont++)
                {
                    tramo_inicial.salida    = tramo.Rows[cont]["tra_desde"].ToString().Trim();
                    tramo_inicial.salida_id = Convert.ToInt32(PuertoFunc.ObtenerPuerto(tramo_inicial.salida).Rows[0]["pue_id"]);
                    if (tramo_inicial.salida_id == recorrido.rec_pue_id_desde)
                    {
                        tramo_inicial.id      = Convert.ToInt32(tramo.Rows[cont]["tra_id"]);
                        tramo_inicial.destino = tramo.Rows[cont]["tra_hasta"].ToString().Trim();
                        tramo_inicial.precio  = Convert.ToDecimal(tramo.Rows[cont]["tra_precio_base"]);
                        tramosList.Enqueue(tramo_inicial);
                        break;
                    }
                }

                for (int i = 0; i < this.cantTramos; i++)
                {
                    if (i == cont)
                    {
                        continue;
                    }

                    Tramo nuevo_tram = new Tramo();
                    //dgv_tramos.Rows[i].Cells[0].Text =  i.ToString();
                    nuevo_tram.id      = Convert.ToInt32(tramo.Rows[i]["tra_id"]);
                    nuevo_tram.salida  = tramo.Rows[i]["tra_desde"].ToString().Trim();
                    nuevo_tram.destino = tramo.Rows[i]["tra_hasta"].ToString().Trim();
                    nuevo_tram.precio  = Convert.ToDecimal(tramo.Rows[i]["tra_precio_base"]);
                    tramosList.Enqueue(nuevo_tram);
                }

                //this.recorridoTramos = tramosList;

                Tramo primer_tramo = tramosList.Dequeue();
                dgv_tramos.Rows[0].Cells["colId"].Value = primer_tramo.id.ToString();
                dgv_tramos.Rows[0].Cells[0].Value       = primer_tramo.salida.ToString().Trim();
                dgv_tramos.Rows[0].Cells[1].Value       = primer_tramo.destino.ToString().Trim();
                dgv_tramos.Rows[0].Cells[2].Value       = primer_tramo.precio.ToString();

                for (int j = 1; j < this.cantTramos;)
                {
                    Tramo nue_tramo = tramosList.Dequeue();
                    if (String.Equals(Convert.ToString(dgv_tramos.Rows[j - 1].Cells[1].Value), nue_tramo.salida))
                    {
                        dgv_tramos.Rows[j].Cells["colId"].Value = nue_tramo.id.ToString();
                        dgv_tramos.Rows[j].Cells[0].Value       = nue_tramo.salida.ToString().Trim();
                        dgv_tramos.Rows[j].Cells[1].Value       = nue_tramo.destino.ToString().Trim();
                        dgv_tramos.Rows[j].Cells[2].Value       = nue_tramo.precio.ToString();
                        j++;
                    }
                    else
                    {
                        tramosList.Enqueue(nue_tramo);
                    }
                }

                for (int j = 0; j < this.cantTramos; j++)
                {
                    Tramo nue_tramo = new Tramo();
                    nue_tramo.id = Convert.ToInt32(dgv_tramos.Rows[j].Cells["colId"].Value);
                    this.recorridoTramos.Enqueue(nue_tramo);
                }

                this.recorridoModificado.rec_id           = recorrido.rec_id;
                this.recorridoModificado.rec_pue_id_desde = recorrido.rec_pue_id_desde;
                this.recorridoModificado.rec_pue_id_hasta = recorrido.rec_pue_id_hasta;
                this.recorridoModificado.rec_estado       = recorrido.rec_estado;

                //MessageBox.Show(String.Format("Cantidad de tramos {0}", recorridoTramos.Count.ToString()));

                //Dejar identificación como grisado
                DataTable pue_desde, pue_hasta;
                pue_desde = PuertoFunc.ObtenerPuerto((int)recorrido.rec_pue_id_desde);
                pue_hasta = PuertoFunc.ObtenerPuerto((int)recorrido.rec_pue_id_hasta);

                dgv_tramos.Rows.RemoveAt(this.cantTramos);

                numericTextBox1.Text     = pue_desde.Rows[0]["pue_nombre"].ToString();
                numericTextBox1.ReadOnly = true;
                numericTextBox2.Text     = pue_hasta.Rows[0]["pue_nombre"].ToString();
                numericTextBox2.ReadOnly = true;
                txt_id.ReadOnly          = true;
            }
            else
            {
                this.esModificar         = false;
                txt_id.Text              = "";
                txt_id.ReadOnly          = false;
                numericTextBox1.ReadOnly = true;
                numericTextBox2.ReadOnly = true;
                dgv_tramos.Rows.Add();
                //Cargar Puerto Desde
                CargarComboPuertoSalida();
                //Cargar Puerto Hasta
                CargarComboPuertoDestino();
            }
        }