none
Crear y manejar un DataGridView por Foreach C# RRS feed

  • Pregunta

  • Hola vengo hace dias tratando de solucionar esto que me esta pasando creo un Datagrid donde le meto informacion de esta manera :

     decimal subtotal = Convert.ToDecimal(this.txtStock.Text) * Convert.ToDecimal(txtPcioCostoActual.Text);
                                    totalPagado = totalPagado + subtotal;
                                    this.lbltotal_Pagado.Text = totalPagado.ToString("#0.00#");
    
                                    //agregar ese detalle al datalostadetalle 
                                    DataRow row = this.dtDetalle.NewRow();
                                    row["idarticulo"] = this.txtIdarticulo.Text;
                                    row["articulo"] = this.txtArticulo.Text;
                                    //stock_inicial eliminado
                                    row["fecha_produccion"] = dtFechaProduccion.Value;
                                    row["fecha_vencimiento"] = dtFechaVencimiento.Value;
                                    row["subtotal"] = subtotal;
                                    //aqui tengo que agregar los datos enviados de detalle ingreso
                                    row["existencia_actual"] = total;
                                    row["existencia_anterior"] = Convert.ToDecimal(txtExistenciaAnterior.Text);
                                    row["fecha_costo"] = Convert.ToDateTime(dtFechaCosto.Value);
                                    row["lote"] = Convert.ToString(txtLote.Text);
                                    row["deposito_sucursal"] = Convert.ToString(txtDepSuc.Text);
                                    row["serie"] = Convert.ToString(txtSerie2.Text);
                                    row["pcio_costo_anterior"] = Convert.ToDecimal(txtPcioCostoAnterior.Text);
                                    row["pcio_costo"] = Convert.ToDecimal(txtPcioCostoActual.Text);
                                    row["iva"] = Convert.ToDecimal(txtIva2.Text);
                                    row["impuesto"] = Convert.ToDecimal(txtImpuesto1.Text);
                                    row["impuesto2"] = Convert.ToDecimal(txtImpuesto2.Text);
                                    row["otros_tributos"] = Convert.ToString(txtOtrosTributos.Text);
                                    row["cantidad"] = Convert.ToDecimal(txtCantidad.Text);
    
    
                                    this.dtDetalle.Rows.Add(row);

    Luego esto me lo crea solo si Registrar esta en true , para que esto suceda tengo que hacer validaciones y tocar datos especificos de el grid que se va creando sin modificar toda una columna por ejemplo controlo que al insertar una serie no este en la BD o que los lotes iguales se vallan sumando o que si es un deposito sucursal diferente se agregue a otra fila , etc.

    //verifica que al ingresar la serie no este repetida en la base de datos 
                            if (NIngreso.CompararSerieExistente(txtIdarticulo.Text, txtSerie2.Text).Equals(txtSerie2.Text))
                            {
                                registrar = false;
                                MessageBox.Show("La serie existe.");
                            }
                            else
                            {
                                foreach (DataRow row in dtDetalle.Rows)
                                {
                                    if (row["idarticulo"].Equals(this.txtIdarticulo.Text))
                                    {
                                        //controla la serie 
    
                                        if (txtSerie2.Text == null || txtSerie2.Text == string.Empty || txtSerie2.Text == "")
                                        {
    
                                            registrar = false;
                                            row["existencia_anterior"] = anterior;
                                            row["existencia_actual"] = total;
    
    
                                        }
                                        else
                                        {
                                            registrar = true;
    
                                        }
    
                                        //controla el deposito sucursal
                                        if (row["deposito_sucursal"].ToString() != (txtDepSuc.Text))
                                        {
                                            MessageBox.Show("deposito sucursal");
                                            registrar = true;
                                            row["existencia_actual"] = total;
                                        }
                                        else
                                        {
                                            registrar = false;
                                            row["existencia_actual"] = total;
    
                                        }
                                        //controla por lote 
                                        if (row["lote"].ToString() != (txtLote.Text))
                                        {
                                            MessageBox.Show("lote");
                                            registrar = true;
                                            row["existencia_actual"] = total;
                                        }
                                        else
                                        {
                                            registrar = false;
                                            row["existencia_actual"] = total;
    
                                        }
                                        //controla por fecha 
                                        if (row["fecha_vencimiento"].ToString() != (dtFechaVencimiento.Value).ToString())
                                        {
                                            MessageBox.Show("fecha vencimiento");
                                            registrar = false;
                                            row["existencia_actual"] = total;
                                        }
                                        else
                                        {
                                            registrar = true;
                                            row["existencia_actual"] = total;
                                        }
                                    }
    
    
                                }

    El problema que me surge es que solo se manejarme con los row[] pero eso esta afectando a toda la columna que tenga esa row, por ejemplo row["serie"] pero quiero modificar por filas , y no estoy muy avanzado con foreach y manejo de grillas si podrian darme un empujon , o si saben de algun curso en que pueda ver eso. Gracias.

    martes, 12 de diciembre de 2017 14:14

Todas las respuestas

  • hola lucas 

    recorrer tu dtDetalle (es un DATATABLE) es recorrer una matriz o navegar en una hoja de excel

    tienes 

    foreach (DataRow row in dtDetalle.Rows)
                                {

    donde afectas todas las filas del dtDetalle

    recorrer una fila del dtDetalle definida o afectar solo una celda definida seria asi:

    ejemplo: dtDetalle .Rows[5][1] 

    o var  variable =dtDetalle.Rows["serie"][1]

    datagrid es el control con lo que "llenas" con tu datatable 

    este link te ayuda a recorrer y entender un datagrid

    creo que es la duda que consultas?


    • Editado greg_dorian martes, 12 de diciembre de 2017 15:50
    martes, 12 de diciembre de 2017 15:49