none
Agregar objetos a una List<> RRS feed

  • Pregunta

  • Hola, quiero agregar objetos a una List<> en el evento click de un button y enlazar esa List a un datagridview, la primera vez que hago clic me trae un total = 0, cuando hago clic por segunda vez me trae el total pero no me muestra el registro en el datagridview, paso el código del evento click

            private void btnConfirma_Click(object sender, EventArgs e)
            {
                foreach (ListViewItem item in lstComprobantes.CheckedItems)
                {
                    clsPendientes oPendientes = datosPendientesImp.Obtener(oImpuestos, item.Index);
                    clsDetImpuestos oDet = new clsDetImpuestos();
                    oDet.Feccom = oPendientes.Fecha;
                    oDet.Tipo = oPendientes.Tipo;
                    oDet.Fijcom = oPendientes.Fijcom;
                    oDet.Comprob = oPendientes.Comprob;
                    oDet.Referencia = oPendientes.Referencia;
                    oDet.Importe = oPendientes.Importe;
                    listDetImpuestos.Add(oDet);
                    total += oPendientes.Importe;
    
                }
                if (total > 0)
                {
                    totalLabel.Visible = true;
                    lblTotal.Visible = true;
                    lblTotal.Text = total.ToString("N");
                }
                clsDetImpuestosBindingSource.DataSource = listDetImpuestos;
                clsDetImpuestosDataGridView.DataSource = clsDetImpuestosBindingSource;
                btnAceptar.Enabled = (listDetImpuestos.Count > 0);
                btnConfirma.Enabled = (listDetImpuestos.Count == 0);
                btnTodos.Visible = (listDetImpuestos.Count == 0);
                lstComprobantes.Visible = (listDetImpuestos.Count == 0);
                clsDetImpuestosDataGridView.Visible = (listDetImpuestos.Count > 0);
                if (btnAceptar.Enabled) btnAceptar.Focus();
            }

    ¿Dónde está el problema?

    Cabe aclarar que el datagridview tiene tres eventos, paso el código de estos eventos:

            private void clsDetImpuestosDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
            {
                clsDetImpuestos oImp = listDetImpuestos[e.RowIndex];
                clsDetImpuestosDataGridView.Rows[e.RowIndex].Cells["columnComprob"].Value = oImp.Fijcom.ToString("D5") + "-" + oImp.Comprob.ToString("D8");
            }
    
            private void clsDetImpuestosDataGridView_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
            {
                for (int i = 0; i < e.RowCount; i++)
                {
                    listDetImpuestos.RemoveAt(i);
                }
                total = 0;
                foreach (clsDetImpuestos item in listDetImpuestos)
                {
                    decimal importe = item.Importe;
                    total += importe;
                }
                lblTotal.Text = total.ToString("N");
            }
    
            private void clsDetImpuestosDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex >= 0)
                {
                    listDetImpuestos[e.RowIndex].Referencia = clsDetImpuestosDataGridView.Rows[e.RowIndex].Cells["columnReferencia"].Value.ToString();
                    listDetImpuestos[e.RowIndex].Importe = Convert.ToDecimal(clsDetImpuestosDataGridView.Rows[e.RowIndex].Cells["columnImporte"].Value);
                    total = 0;
                    foreach (clsDetImpuestos oImp in listDetImpuestos) total += oImp.Importe;
                    lblTotal.Text = total.ToString("N");
                }
            }
    

    viernes, 21 de junio de 2019 16:47

Respuestas

  • Pon un Breakpoint para debugear.

    Primero asegurate que esta linea

     clsPendientes oPendientes = datosPendientesImp.Obtener(oImpuestos, item.Index);

    Si te esta trayendo datos,

    Segundo en estas lineas

    clsDetImpuestosBindingSource.DataSource = listDetImpuestos;
    clsDetImpuestosDataGridView.DataSource = clsDetImpuestosBindingSource;

    pasas la lista de listDetImpuestos como datasource al clsDetImpuestosBindingSource no se que control o objeto es.

    pero pero despues ese objeto lo pasas al clsDetImpuestosDataGridview por que haces eso???

    Por que no pasas la lista directo al datasource del datagridview???

    viernes, 21 de junio de 2019 17:36

Todas las respuestas

  • Pon un Breakpoint para debugear.

    Primero asegurate que esta linea

     clsPendientes oPendientes = datosPendientesImp.Obtener(oImpuestos, item.Index);

    Si te esta trayendo datos,

    Segundo en estas lineas

    clsDetImpuestosBindingSource.DataSource = listDetImpuestos;
    clsDetImpuestosDataGridView.DataSource = clsDetImpuestosBindingSource;

    pasas la lista de listDetImpuestos como datasource al clsDetImpuestosBindingSource no se que control o objeto es.

    pero pero despues ese objeto lo pasas al clsDetImpuestosDataGridview por que haces eso???

    Por que no pasas la lista directo al datasource del datagridview???

    viernes, 21 de junio de 2019 17:36
  • Muchas gracias, por algún motivo al pasar al datagridview se arregló todo, muestra el total y el registro
    viernes, 21 de junio de 2019 18:09