(Ayuda) Sumar elementos de fila o columna impar en DataGridView (VisualBasic)

Iniciado por MikeSky, 10 Diciembre 2014, 19:55 PM

0 Miembros y 1 Visitante están viendo este tema.

MikeSky

Debo sumar los elementos que se encuentren en una fila o columna impar de una matriz que está en un DataGridView.
Éste es el código que llevo:

Código (vbnet) [Seleccionar]


       Dim i, j As Integer
       Dim tabla(5, 5) As String

       'Pedir valores

       With DataGridView1

           .Columns.Add("", "")
           .Columns.Add("", "")
           .Columns.Add("", "")
           .Columns.Add("", "")
           .Columns.Add("", "")

           .RowCount = 5

           For i = 0 To 4

               For j = 0 To 4

                   tabla(i, j) = InputBox("Digite un número")
                   .Item(i, j).Value = tabla(i, j)

               Next

           Next

           
       End With




He hecho de todo pero no sé como sumar los elementos de una fila o columna impar.
Ayuda por favor !!! Se los agradezco de antemano

Eleкtro

No se si te refieres a hacer esto:

Código (vbnet) [Seleccionar]
Dim rowIndex As Integer = 0
Dim colIndex As Integer = 1

Dim sumRow As Integer = (From cell As DataGridViewCell
                       In DataGridView1.Rows(rowIndex).Cells
                       Select CInt(cell.Value)
                       ).Sum

Dim sumCol As Integer = (From cell As DataGridViewCell
                       In DataGridView1.Rows.Item(colIndex).Cells
                       Select CInt(cell.Value)
                       ).Sum

MsgBox(sumRow)
MsgBox(sumCol)


Saludos








MikeSky

Elektro, gracias por responder !!!
Lo he programado según tu ayuda pero me genera error:

en la línea

Select CInt (cell.Value)

genera que se espera fin de instrucción

y en la línea

MsgBox(sumRow)

sumRow me aparece sin declarar

No entiendo por qué

Eleкtro

Cita de: MikeSky en 10 Diciembre 2014, 20:40 PM
genera que se espera fin de instrucción
No entiendo por qué

Es un error de sintaxis (por tu parte), como te indica se espera un final de instrucción, un cierre tras una apertura de paréntesis, ¡muestra el código!

EDITO: Ah, ya veo, dejaste un espacio en blanco en: Cint (), aunque no se si ese será el único problema del código, muestralo si te sigue fallando.

¿Que versión de VisualStudio estás utilizando?, esos "descuidos" los debería resolver la IDE por si misma sin intervención tuya, a menos que estás utilizando una versión muy antigua quizás?.

Saludos!









MikeSky

Sii jeje ya me salió ... era un error mío !!!

Estoy usando Visual 2008 Express

En cuanto al código que me enviaste, funciona perfecto con las dos primeras filas ... pero como es una matriz de 5 lineas puedo cambiarlo para que solo funciones con las lineas 1, 3 y 5 ??

Eleкtro

Cita de: MikeSky en 10 Diciembre 2014, 21:29 PMcomo es una matriz de 5 lineas puedo cambiarlo para que solo funciones con las lineas 1, 3 y 5 ??

Claro, crea un búcle que itere los índices para comprobar que índices son primos, y cuando encuentres uno, haces las sumas.

Con esta función puedes hacer la tarea de comprobar si un número es primo:

Citar
Código (vbnet) [Seleccionar]
   ' Number Is Prime?
   ' ( By Elektro)
   '
   ' Usage examples :
   '
   ' MsgBox(NumberIsPrime(3)) ' Result: True      
   ' MsgBox(NumberIsPrime(4)) ' Result: False
   '
   ''' <summary>
   ''' Determines whether a numeric value is prime.
   ''' </summary>
   ''' <param name="Value">Indicates the numeric value.</param>
   ''' <returns><c>true</c> if value is prime, <c>false</c> otherwise.</returns>
   Private Function NumberIsPrime(ByVal Value As Long,
                                  Optional ByVal f As Long = 2L) As Boolean

       If Value = f Then
           Return True

       ElseIf (Value Mod f = 0L Or Value = 1L) Then
           Return False

       Else
           Return NumberIsPrime(Value, f + 1L)

       End If

   End Function

EDITO: Pseudo-código:
for x as integer = 0 to (rows.count -1)

   if NumberIsPrime(x) then...
   end if

next



Saludos!








MikeSky

Cita de: Eleкtro en 10 Diciembre 2014, 21:32 PM

Con esta función puedes hacer la tarea de comprobar si un número es primo:


Bueno no era lo que precisamente preguntaba, pero me sirve para otro proyecto que estoy haciendo. Jeje  :)

A lo que me refiero es si puedo modificar el código que pusiste de manera que solo sume los elementos de la línea 1, la linea 3y la línea 5

ALGO COMO ESTO

F1 1 2 3 4 5 = 15
F2 6 7 8 9 5
F3 2 6 8 7 2 = 25
F4 1 2 3 4 5
F5 1 2 4 9 2 = 18

Eleкtro

Cita de: MikeSky en 10 Diciembre 2014, 21:44 PM
Bueno no era lo que precisamente preguntaba, pero me sirve para otro proyecto que estoy haciendo. Jeje  :)

A lo que me refiero es si puedo modificar el código que pusiste de manera que solo sume los elementos de la línea 1, la linea 3y la línea 5

ALGO COMO ESTO

F1 1 2 3 4 5 = 15
F2 6 7 8 9 5
F3 2 6 8 7 2 = 25
F4 1 2 3 4 5
F5 1 2 4 9 2 = 18

No se si quieres hacerlo directamente usando las dimensiones de la matriz, o usando las filas del GridView (y si es esto último entonces ya tienes el código hecho, solo debes adaptarlo a tus necesidades),
sea como sea ambas cosas se hacen de "igual" forma, ¿cual es el problema que encuentras?, muestra tus progresos y especifica donde estás atascado.

Saludos!








MikeSky

Muchas gracias Elektro. aquí comparte el código para sumar elementos de filas impares de una matriz en DataGridView

Código (vbnet) [Seleccionar]


Dim i, j As Integer
       Dim tabla(5, 5) As String

       'Pedir valores

       With DataGridView1

           .Columns.Add("", "")
           .Columns.Add("", "")
           .Columns.Add("", "")
           .Columns.Add("", "")
           .Columns.Add("", "")

           .RowCount = 5

           For i = 0 To 4

               For j = 0 To 4

                   tabla(i, j) = InputBox("Digite un número")
                   .Item(i, j).Value = tabla(i, j)

               Next

           Next



       End With

       'Filas impares

       Dim fila1 As Integer = 0
       Dim fila3 As Integer = 2
       Dim fila5 As Integer = 4

       Dim sumFila1 As Integer = (From cell As DataGridViewCell In DataGridView1.Rows(fila1).Cells Select CInt(cell.Value)).Sum

       Dim sumFila3 As Integer = (From cell As DataGridViewCell In DataGridView1.Rows.Item(fila3).Cells Select CInt(cell.Value)).Sum

       Dim sumFila5 As Integer = (From cell As DataGridViewCell In DataGridView1.Rows.Item(fila5).Cells Select CInt(cell.Value)).Sum

       Label1.Visible = True
       Label1.Text = "La suma de los valores de la primer fila es de " & sumFila1

       Label3.Visible = True
       Label3.Text = "La suma de los valores de la tercera fila es de " & sumFila3

       Label5.Visible = True
       Label5.Text = "La suma de los valores de la quinta fila es de " & sumFila5


CRIPLATA

HOLA, TENGO UN PROBLEMA, QUIERO SUMAR LAS COLUMNAS IMPARES, INTENTE REALIZAR COMO UDS LO A REALIZADO PERO AL SUMAR LA COLUMNA EL RESULTADO ES LE MISMO QUE EL DE LA FILAS