none
Obtener todos los datagridview.rows.item(i).cells() en textbox multiline RRS feed

  • Pregunta

  • Hola gente!

    El otro día se me sugirió una pieza de código para un for each que trataba de implementar a fin de obtener los datos de un dgv.

    Actualmente tengo esto

    Private Sub unico()
            For i As Integer = 0 To datalistado.Rows.Count - 1
    
                If Not datalistado.Rows.Item(i).Cells(2).ToString = "" Then
    
                    Dim bebida = datalistado.Rows.Item(i).Cells(2).Value
                    Dim total = datalistado.Rows.Item(i).Cells(3).Value
    
                    txtreporte.Text = bebida And total
                End If
            Next
        End Sub

    Directamente, NO SÉ como, en el txtreporte.text (que está en modo multiline), obtener todas las rows del dgv.

    Por ejemplo, que en el textbox se muestre: el usuario ha consumido: "bebida1" un total de "total", "bebida2" "total", "bebida3" "total" y así con cada row que se muestre en el dgv...

    Por otra parte tengo esto:

    Private Sub totales()
            For i As Integer = 0 To datalistado.Rows.Count - 1
                Dim total = datalistado.Rows.Item(i).Cells(3).Value
                If total <= 3 Then
                    Const varias_riesgo_bajo As String = "Nivel de riesgo bajo"
                Else
                    If total = 4 < 26 Then
                        Const varias_riesgo_medio As String = "Nivel de riesgo moderado"
                    Else
                        If total >= 27 Then
                            Const varias_riesgo_alto As String = "Nivel de riesgo alto"
                        End If
                    End If
                End If
            Next
        End Sub

    Que debería ir de la mano con lo anterior a fin de poder hacer comparaciones y que se muestre: el usuario ha consumido: "bebida1" un total de "total" lo que representa "totales".............. y así con todas las rows del dgv.

    Desde ya agradezco cualquier ayuda que me puedan brindar.

    Saludos cordiales.

    martes, 13 de junio de 2017 4:27

Respuestas

  • Ejemplo en caso los datos los hayas agregado a la grilla mediante los métodos Add()/AddRange() (en caso los datos se encuentren vinculados a un origen debes operar sobre los mismos, la forma es la misma)

    txtreporte.Text = String.Empty
    
    For Each Fila As DataGridViewRow In DataGridView1.Rows
    	If Not Fila.IsNewRow Then
    
    		Dim Monto = Convert.ToDecimal(Fila.Cells(3).Value)
    		Dim NivelRiesgo = If(Monto <= 3, "BAJO",
    				If(Monto >= 4 AndAlso Monto <= 26, "MODERADO", "ALTO"))
    
    		txtreporte.Text += String.Format("{0} un total de {1}. Nivel de riesgo: {2}{3}",
    			Convert.ToString(Fila.Cells(2).Value), Monto, NivelRiesgo, Environment.NewLine)
    	End If
    Next


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Alesx de Souza martes, 13 de junio de 2017 14:53
    martes, 13 de junio de 2017 4:49
  • ¿Cómo lo resolverías tú?, no es nada nuevo respecto a lo que ya se ha hecho.

    For Each Fila As DataGridViewRow In DataGridView1.Rows
    	If Not Fila.IsNewRow Then
    		Dim Producto = Convert.ToString(Fila.Cells(2).Value)
    		Dim Monto = Convert.ToDecimal(Fila.Cells(3).Value)
    		Dim NivelRiesgo = String.Empty
    
    		If Producto = "Ron" Then
    			NivelRiesgo = If(Monto <= 10, "BAJO",
    				If(Monto >= 11 AndAlso Monto <= 26, "MODERADO", "ALTO"))
    		Else
    			NivelRiesgo = If(Monto <= 3, "BAJO",
    				If(Monto >= 4 AndAlso Monto <= 26, "MODERADO", "ALTO"))
    		End If
    
    		txtreporte.Text += $"{Producto} un total de {Monto}. 
    						Nivel de riesgo: {NivelRiesgo}{Environment.NewLine}"
    	End If
    Next

    Quizá debas considerar tener una tabla de escalas, no creo que los valores tengan que ser escritos "en duro" en la aplicación, aún con mayor razón si las escalas varían por cada producto.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 13 de junio de 2017 16:09

Todas las respuestas

  • Ejemplo en caso los datos los hayas agregado a la grilla mediante los métodos Add()/AddRange() (en caso los datos se encuentren vinculados a un origen debes operar sobre los mismos, la forma es la misma)

    txtreporte.Text = String.Empty
    
    For Each Fila As DataGridViewRow In DataGridView1.Rows
    	If Not Fila.IsNewRow Then
    
    		Dim Monto = Convert.ToDecimal(Fila.Cells(3).Value)
    		Dim NivelRiesgo = If(Monto <= 3, "BAJO",
    				If(Monto >= 4 AndAlso Monto <= 26, "MODERADO", "ALTO"))
    
    		txtreporte.Text += String.Format("{0} un total de {1}. Nivel de riesgo: {2}{3}",
    			Convert.ToString(Fila.Cells(2).Value), Monto, NivelRiesgo, Environment.NewLine)
    	End If
    Next


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Marcado como respuesta Alesx de Souza martes, 13 de junio de 2017 14:53
    martes, 13 de junio de 2017 4:49
  • Willams, me acaban de hacer una nueva solicitúd respecto a esto.

    Me acaban de informar que, una bebida específica que "puede aparecer en el datagridview" se calcula distinto.

    Como puedo realizarlo? Ya que tu respuesta, que anduvo a la perfección, me muestra todos los resultados y los calcula a todos por igual.

    Ahora tengo "ron", que se calcula 

    0 – 10 riesgo bajo

    11 – 26 riesgo moderado

    27+ - riesgo alto

    Muchas gracias!

    martes, 13 de junio de 2017 15:35
  • ¿Cómo lo resolverías tú?, no es nada nuevo respecto a lo que ya se ha hecho.

    For Each Fila As DataGridViewRow In DataGridView1.Rows
    	If Not Fila.IsNewRow Then
    		Dim Producto = Convert.ToString(Fila.Cells(2).Value)
    		Dim Monto = Convert.ToDecimal(Fila.Cells(3).Value)
    		Dim NivelRiesgo = String.Empty
    
    		If Producto = "Ron" Then
    			NivelRiesgo = If(Monto <= 10, "BAJO",
    				If(Monto >= 11 AndAlso Monto <= 26, "MODERADO", "ALTO"))
    		Else
    			NivelRiesgo = If(Monto <= 3, "BAJO",
    				If(Monto >= 4 AndAlso Monto <= 26, "MODERADO", "ALTO"))
    		End If
    
    		txtreporte.Text += $"{Producto} un total de {Monto}. 
    						Nivel de riesgo: {NivelRiesgo}{Environment.NewLine}"
    	End If
    Next

    Quizá debas considerar tener una tabla de escalas, no creo que los valores tengan que ser escritos "en duro" en la aplicación, aún con mayor razón si las escalas varían por cada producto.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    martes, 13 de junio de 2017 16:09