none
Como se puede poner un contador y un for + if en datagrid? RRS feed

  • Pregunta

  • Hola ,que tal 

    Quiero hacer lo siguiente: 

    Pero quiero hacer que el primer contador cambie mediante voy tocando el button, 

    nose bien si es con este commando: " for (int i = 0; i < 10; i++) " //quiero ver si al tocar el button me de 10 numeros, que luego iran con los numeros random que quiero poner abajo// , pero nose como agregarlo directamente a la viñeta "total".

    Despues quisiera poder poner un numero random que creo que es con esto: " int valor = rnd.Next(7900, 8200) " , pero nose bien como agregarlo a la viñeta , ademas que con el mismo quisiera hacer un if , que me separe nose si esto esta bien , pero creo que es algo asi " if (!((int)e.Value < 8000) && !((int)e.Value > 8120)) " pero nose como agregarlo, si esta en 8000 hasta 8120 lo ponga en la viñeta "correcta" y si no es que vaya a "incorrecta"

    disculpen que pida mucho , es que estoy con esto y no puedo hacerlo :S 

    Desde ya , muchas gracias.

    miércoles, 9 de enero de 2019 19:15

Respuestas

  • Hola:

    hide() te lo oculta no te lo borra.

    La opción más fácil, es que cada form tienga su código igual, pero diferente, de manera que datagridview2, tiene otro dataTable.

    En vez de tener el código en el metodo button1.click, extraelo a otro método y desde button1.click, llámalo.

    Haciendo esta operativa, ya podrás invocar a la vez, el código también perteneciente al otro formulario, ya que su dataTable lo llenas con los siguientes valores.

    lunes, 14 de enero de 2019 6:04

Todas las respuestas

  • Hola  Números al azar y contador DataGridView

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comento que estaremos realizando una revisión a profundidad acerca del inconveniente que se te está presentando.

    Proporcionaremos una respuesta lo más pronto posible.

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.
    miércoles, 9 de enero de 2019 22:58
    Moderador
  • Hola Números al azar y contador en DataGridView:

    Lo que estas preguntando no tiene mucho sentido. Seguro que para tí lo tiene, porque tu idea esta en tú cabeza, pero no es lo que has escrito.

    Pero quiero hacer que el primer contador cambie mediante voy tocando el button,

    En el evento click de tu botón desarrollas el código para que cuente..... aquí supongo que te referiras a contar las filas del datagridview.

    https://stackoverflow.com/questions/1031704/visual-basic-how-do-i-read-each-row-in-a-datagrid

    Para el resto, que por lo que intento pensar, estas buscando ayuda, en como cargar y modificar datos en el datagridview

    https://aprendamosdeprogramacion.wordpress.com/2016/10/15/capturar-y-mostrar-datos-de-un-datagridview-en-vb-net/

    Espero te ayude

    jueves, 10 de enero de 2019 5:59
  • Pero quiero hacer que el primer contador cambie mediante voy tocando el button,

    En el evento click de tu botón desarrollas el código para que cuente..... aquí supongo que te referiras a contar las filas del datagridview.

    Es lo siguiente , cuando presiono el button , quiero poner que me de 10 números(Random), pero que en la primer fila ("Total") me cuente cada una de ellas, lo que no entiendo bien, es como agregarlos , por eso dejo los commandos que use , pero no me funciona bien (  for (int i = 0; i < 10; i++) ) //nose si esta bien, pero creo que ese es el contador//

    //El commando de numeros randoms creo que es este "  int valor = rnd.Next(7900, 8200)" < ahi pongo desde que numero hasta que numero , verdad?

    Deberia ponerlo asi? " dtgvProyecto.Rows[n].Cells[1].Value =   int valor = rnd.Next(7900, 8200) y aqui acomplar el if que si el numero random me da 8000 hasta 8120 , deberia ir a la viñeta correcto , de lo contrario a incorrecta, esa es mi pregunta,  nose bien como acomplarlos en las celdas

    jueves, 10 de enero de 2019 18:13
  • Hola:

    Creo que te he entendido.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim table As New DataTable
    
            table.Columns.Add("Total", GetType(Integer))
            table.Columns.Add("Correctas", GetType(Integer))
            table.Columns.Add("Incorrectas", GetType(Integer))
    
            Dim aleatorio As Integer
    
            Dim contadorCorrecto As Integer
    
            For index As Integer = 1 To 10
                aleatorio = GetRandom(7900, 8120)
                If aleatorio < 8000 Then
                    contadorCorrecto = contadorCorrecto + 1
                End If
                table.Rows.Add(index, aleatorio, contadorCorrecto)
            Next
            DGTabla.DataSource = table
        End Sub
    
      
    
        Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
            
            Static Generator As System.Random = New System.Random()
            Return Generator.Next(Min, Max)
        End Function

    En el ejemplo, en vez de alimentar los datos directamente en un dataGridView, utilizó un dataTable. Y es el dataTable, el que alimenta al dataGridView.

    Al mismo le creo tres columnas, y luego como tu quieres diez filas, buscamos un aleatorio, que te he puesto en otro método separado, y si el mismo, es menor que 8000 consideramos que es incorrecto, sino es correcto, por tanto le sumo uno al contador.

    Espero te ayude, o al menos te aclare un poco el panorama.

    jueves, 10 de enero de 2019 20:56
  • Hola:

    Creo que te he entendido.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim table As New DataTable
    
            table.Columns.Add("Total", GetType(Integer))
            table.Columns.Add("Correctas", GetType(Integer))
            table.Columns.Add("Incorrectas", GetType(Integer))
    
            Dim aleatorio As Integer
    
            Dim contadorCorrecto As Integer
    
            For index As Integer = 1 To 10
                aleatorio = GetRandom(7900, 8120)
                If aleatorio < 8000 Then
                    contadorCorrecto = contadorCorrecto + 1
                End If
                table.Rows.Add(index, aleatorio, contadorCorrecto)
            Next
            DGTabla.DataSource = table
        End Sub
    
      
    
        Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
            
            Static Generator As System.Random = New System.Random()
            Return Generator.Next(Min, Max)
        End Function

    En el ejemplo, en vez de alimentar los datos directamente en un dataGridView, utilizó un dataTable. Y es el dataTable, el que alimenta al dataGridView.

    Al mismo le creo tres columnas, y luego como tu quieres diez filas, buscamos un aleatorio, que te he puesto en otro método separado, y si el mismo, es menor que 8000 consideramos que es incorrecto, sino es correcto, por tanto le sumo uno al contador.

    Espero te ayude, o al menos te aclare un poco el panorama.


    jueves, 10 de enero de 2019 22:03
  • Hola:

    Creo que te he entendido.

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim table As New DataTable
    
            table.Columns.Add("Total", GetType(Integer))
            table.Columns.Add("Correctas", GetType(Integer))
            table.Columns.Add("Incorrectas", GetType(Integer))
    
            Dim aleatorio As Integer
    
            Dim contadorCorrecto As Integer
    
            For index As Integer = 1 To 10
                aleatorio = GetRandom(7900, 8120)
                If aleatorio < 8000 Then
                    contadorCorrecto = contadorCorrecto + 1
                End If
                table.Rows.Add(index, aleatorio, contadorCorrecto)
            Next
            DGTabla.DataSource = table
        End Sub
    
      
    
        Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
            
            Static Generator As System.Random = New System.Random()
            Return Generator.Next(Min, Max)
        End Function

    En el ejemplo, en vez de alimentar los datos directamente en un dataGridView, utilizó un dataTable. Y es el dataTable, el que alimenta al dataGridView.

    Al mismo le creo tres columnas, y luego como tu quieres diez filas, buscamos un aleatorio, que te he puesto en otro método separado, y si el mismo, es menor que 8000 consideramos que es incorrecto, sino es correcto, por tanto le sumo uno al contador.

    Espero te ayude, o al menos te aclare un poco el panorama.

    es justamente lo que necesitaba , pero hay cosas que no me toma el compilador 
    jueves, 10 de enero de 2019 22:04
  • No será que lo has puesto en VB.net, y sin embargo, tu proyecto, por lo que parece es de C#

    ¿En que lenguaje lo quieres programar?

    jueves, 10 de enero de 2019 22:20
  • No será que lo has puesto en VB.net, y sin embargo, tu proyecto, por lo que parece es de C#

    ¿En que lenguaje lo quieres programar?

    pense que estaba en .net, pero si , esta en C# , disculpa :( 
    viernes, 11 de enero de 2019 17:45
  • Hola Números al azar y contador DataGridView;

     const int minValue = 7200;
            const int maxValue = 8120;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));
    
                int aleatorio=0, contador=0;
                for (int i = 0; i < 10; i++)
                {
    
                    aleatorio = getRandom(minValue, maxValue);
                    if (aleatorio<8000)
                        contador++;
    
                    dt.Rows.Add(i, aleatorio, contador);
                }
    
                DGTabla.DataSource = dt;
            }
    
            private int getRandom(int min, int max)
            {
                var rnd = new Random();
                return rnd.Next(min, max);
            }

    En c# puede ser algo así.

    viernes, 11 de enero de 2019 18:12
  • Hola Números al azar y contador DataGridView;

     const int minValue = 7200;
            const int maxValue = 8120;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));
    
                int aleatorio=0, contador=0;
                for (int i = 0; i < 10; i++)
                {
    
                    aleatorio = getRandom(minValue, maxValue);
                    if (aleatorio<8000)
                        contador++;
    
                    dt.Rows.Add(i, aleatorio, contador);
                }
    
                DGTabla.DataSource = dt;
            }
    
            private int getRandom(int min, int max)
            {
                var rnd = new Random();
                return rnd.Next(min, max);
            }

    En c# puede ser algo así.

    CS1061 "Random" no contiene una definición para "Next" ni se encuentra ningún método de extensión "Next" accesible que acepte un primer argumento del tipo "Random" (¿falta alguna directiva using o una referencia de ensamblado? " 

    Antes tambien habia usado el .next y me salia lo mismo , no entiendo bien eso :S  , pero todo lo demas lo toma sin problemas

    viernes, 11 de enero de 2019 18:36
  • Pulsa en visual studio botón derecho sobre next y el intellisense te ofrecerá la solución.

    No obstante Random pertenece a using System;

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            const int minValue = 7200;
            const int maxValue = 8120;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));
    
                int aleatorio=0, contador=0;
                for (int i = 0; i < 10; i++)
                {
    
                    aleatorio = getRandom(minValue, maxValue);
                    if (aleatorio<8000)
                        contador++;
    
                    dt.Rows.Add(i, aleatorio, contador);
                }
    
                DGTabla.DataSource = dt;
            }
    
            private int getRandom(int min, int max)
            {
                var rnd = new Random();
                return rnd.Next(min, max);
            }
        }
    }
    

    Random aparece en .net 1.1 en el namespace System

    https://docs.microsoft.com/es-es/dotnet/api/system.random.next?view=netframework-4.7.2

    http://devcate.blogspot.com/2012/06/generar-numeros-aleatorios.html

    viernes, 11 de enero de 2019 19:22
  • Pulsa en visual studio botón derecho sobre next y el intellisense te ofrecerá la solución.

    No obstante Random pertenece a using System;

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            const int minValue = 7200;
            const int maxValue = 8120;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));
    
                int aleatorio=0, contador=0;
                for (int i = 0; i < 10; i++)
                {
    
                    aleatorio = getRandom(minValue, maxValue);
                    if (aleatorio<8000)
                        contador++;
    
                    dt.Rows.Add(i, aleatorio, contador);
                }
    
                DGTabla.DataSource = dt;
            }
    
            private int getRandom(int min, int max)
            {
                var rnd = new Random();
                return rnd.Next(min, max);
            }
        }
    }

    Random aparece en .net 1.1 en el namespace System

    https://docs.microsoft.com/es-es/dotnet/api/system.random.next?view=netframework-4.7.2

    http://devcate.blogspot.com/2012/06/generar-numeros-aleatorios.html

    Ya funciono , pero no me separa correctas de incorrectas , me da un numero al azar en correctas ._.

    el if deberia decir (8000>8120) correctas , de lo contrario , seria un contador para incorrectas

    viernes, 11 de enero de 2019 19:57
  • creo que era algo asi " if (!((int)e.Value < 8000) && !((int)e.Value > 8120)) " ahi pondria correctas ?
    y en el else lo contrario ?? 
    viernes, 11 de enero de 2019 20:43
  • Hola:

    No lo compliques que es muy simple.

    donde dice

    if (aleatorio<8000)

    debe decir lo contrario

    if (aleatorio>=8000)

    Te lo explico: El bucle que genera las filas, llama al metodo GetRandom, que le devuelve un numero aleatorio entre 7900 y 8120.

    La sentencia de condición if, evalúa si el valor devuelto se considera correcto o incorrecto. Si es correcto, le suma uno al contador.

    y luego inserta en el datatable, el numero de fila, el numero aleatorio para el bucle, y el contador

    sábado, 12 de enero de 2019 5:59
  • Hola:

    No lo compliques que es muy simple.

    donde dice

    if (aleatorio<8000)

    debe decir lo contrario

    if (aleatorio>=8000)

    Te lo explico: El bucle que genera las filas, llama al metodo GetRandom, que le devuelve un numero aleatorio entre 7900 y 8120.

    La sentencia de condición if, evalúa si el valor devuelto se considera correcto o incorrecto. Si es correcto, le suma uno al contador.

    y luego inserta en el datatable, el numero de fila, el numero aleatorio para el bucle, y el contador

    No me esta sumando nada a ninguno de los dos y ya le cambie el if

    No le suma 1 contador ya sea para correcto o para incorrecto

    sábado, 12 de enero de 2019 16:54
  • dentro del if , lo que necesito que se vea seria

    8000 - 8120 = 1 contador a correcto , 0 incorrectos

    de lo contrario si es ejemplo 7999 (o menor) o 8121(o mayor) = 1 correcto(del anterior), 1 incorrecto

    y asi sucesivamente con los 10 numeros generados,

    otra cosa, cada vez que toco el button me da los mismos numeros en el contador total ? no hay un acumulador completo ? (si toco el button 2 veces me dice siempre 1 - 9 , todas las veces que lo presiono me sale el mismo nombre en contador total)

    sábado, 12 de enero de 2019 16:58

  • por lo que veo aca tambien , es que los 10 numeros "randoms" son los 10 iguales (8227 se repite en todos) 

    sábado, 12 de enero de 2019 17:07
  • Lo puse asi

                        

    int aleatorio = 0, correctas = 0 , incorrectas =0;
                for (int i = 0; i < 20; i++)
                {

                    aleatorio = getRandom(minValue, maxValue);
                    if (aleatorio >= 8000 && aleatorio <=8120) 
                        correctas++;
                    else
                        if (aleatorio < 8000 && aleatorio > 8120)
                        incorrectas++;
                    else
                        incorrectas++;




                    dt.Rows.Add(i, correctas, incorrectas);

    pero me sigue dando mal, osea me da de los 20 numeros que pido , solo me da 1 repetido 20veces

    ademas que siempre que lo presiono solo me da 20numeros nuevos borrandome los anteriores, y quiero que se mantengan los anteriores ejemplo, presiono 1 vez me da del 10 numeros, presiono de nuevo y tendria 20 numeros, presiono de nuevo y me da 30 numeros y asi sucesivamente 

    sábado, 12 de enero de 2019 20:12
  • Hola Números al azar y contador DataGridView:

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            const int minValue = 7900;
            const int maxValue = 8120;
            DataTable dt;
            int numVecesBoton = 0;
            int aleatorio = 0, correcto = 0, incorrecto=0; 
            /*variables del formulario */
                
            public Form1()
            {
                InitializeComponent();
                dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Aleatorios", typeof(int));
                dt.Columns.Add("Resultados", typeof(int));
                /*inicializada tabla */
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Random rnd = new Random((int)DateTime.Now.Ticks); 
                /*generamos el aleatorio con la semilla */
                for (int i = 0; i < 10; i++)
                {
                    aleatorio = rnd.Next(minValue, maxValue); /*obtenemos un aleatorio */
                    if (aleatorio >= 8000)
                        correcto++; /* si es valor mayor que 8000 sumamos 1 a correcto */
                    else
                        incorrecto++; 
                    /* sino le sumamos uno a incorrecto */
    
                    dt.Rows.Add(i+1+(10*numVecesBoton), aleatorio, correcto); 
                    /*cargamos una fila en el dataTable con la fila*/
                }
                DGTabla.DataSource = dt;
                numVecesBoton++;
            }
        }
    }
    

    Para poder tener el botón y añadir varias veces cuando le das, tienes que sacar la definición del dataTable del método para que pueda persistir, por ejemplo al formulario.

    Como el contador varíará te he puesto otras variables.

    Además para generar nuevos aleatorios, tienes que crear el objeto Random, con una semilla.

    Sigo sin entender como quieres la tercera columna, pero en la linea que cargamos la fila en el dataTable, van en la variable correcta, cuando es mayor que 7999. Las incorrectas no se visualizan aunque te he añadido una variable por si lo quieres gestionar.

    Salida

    domingo, 13 de enero de 2019 1:45
  • Hola Números al azar y contador DataGridView:

    using System;
    using System.Data;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            const int minValue = 7900;
            const int maxValue = 8120;
            DataTable dt;
            int numVecesBoton = 0;
            int aleatorio = 0, correcto = 0, incorrecto=0; 
            /*variables del formulario */
                
            public Form1()
            {
                InitializeComponent();
                dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Aleatorios", typeof(int));
                dt.Columns.Add("Resultados", typeof(int));
                /*inicializada tabla */
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Random rnd = new Random((int)DateTime.Now.Ticks); 
                /*generamos el aleatorio con la semilla */
                for (int i = 0; i < 10; i++)
                {
                    aleatorio = rnd.Next(minValue, maxValue); /*obtenemos un aleatorio */
                    if (aleatorio >= 8000)
                        correcto++; /* si es valor mayor que 8000 sumamos 1 a correcto */
                    else
                        incorrecto++; 
                    /* sino le sumamos uno a incorrecto */
    
                    dt.Rows.Add(i+1+(10*numVecesBoton), aleatorio, correcto); 
                    /*cargamos una fila en el dataTable con la fila*/
                }
                DGTabla.DataSource = dt;
                numVecesBoton++;
            }
        }
    }

    Para poder tener el botón y añadir varias veces cuando le das, tienes que sacar la definición del dataTable del método para que pueda persistir, por ejemplo al formulario.

    Como el contador varíará te he puesto otras variables.

    Además para generar nuevos aleatorios, tienes que crear el objeto Random, con una semilla.

    Sigo sin entender como quieres la tercera columna, pero en la linea que cargamos la fila en el dataTable, van en la variable correcta, cuando es mayor que 7999. Las incorrectas no se visualizan aunque te he añadido una variable por si lo quieres gestionar.

    Salida

    Al final le cambie unas cosas :

        public partial class Form1 : Form
        {
            const int minValue = 7900;
            const int maxValue = 8120;
            DataTable dt;
            int numVecesBoton = 0;
            int aleatorio = 0, correcto = 0, incorrecto = 0;
            public Form1()
            {
                
                InitializeComponent();
               
            }

            private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));

                Random rnd = new Random((int)DateTime.Now.Ticks);

                int aleatorio = 0, correctas = 0 , incorrectas =0;
                for (int i = 0; i < 20; i++)
                {

                    aleatorio = rnd.Next(minValue, maxValue);
                    if (aleatorio >= 8000 && aleatorio <=8120 )
                        correctas++; 
                    else
                        incorrectas++;
                  

                    dt.Rows.Add(i + 1 + (20 * numVecesBoton), correctas + (20 * numVecesBoton), incorrectas + (20 * numVecesBoton));

                }

                dataGridView1.DataSource = dt;
                numVecesBoton++;

                int aleatorio = 0, correctas = 0 , incorrectas =0;
                for (int i = 0; i < 20; i++)
                {

                    aleatorio = rnd.Next(minValue, maxValue); 
                    if (aleatorio >= 8000 && aleatorio <=8120 )
                        correctas++; 
                    else
                        incorrectas++;
                    /* sino le sumamos uno a incorrecto */

                    dt.Rows.Add(i + 1 + (20 * numVecesBoton), correctas + (20 * numVecesBoton), incorrectas + (20 * numVecesBoton));
                }

                dataGridView1.DataSource = dt;
            }

            private int getRandom(int min, int max)
            {
                var rnd = new Random();
                return rnd.Next(7800, 8300);
               
            }

    quedo asi :3

    domingo, 13 de enero de 2019 4:06
  • Ahora si va cambiando mediante le voy tocando el boton , pero no me deja ver las anteriores 10 que ya se habian cargado, ademas le agregue al final:
                dataGridView1.DataSource = dt;
                dataGridView2.DataSource = dt;

    pero en ambos me da los mismos números , esos no pueden dar distintos ? intento copiando y pegando de nuevo el if pero igual da los mismos números , aunque ahi ya consegui lo que estaba buscando 

    el numero 8000 , 8120 , lo necesitaba pero lo que queria que muestre era solo un contador de los números, asi como se ve en la imagen que subi :D  

    domingo, 13 de enero de 2019 4:09
  • Hola:

    Para que te deje ver las anteriores.

    El objeto DataTable no se puede inicializar, cada vez que le das al botón, porque esta asociado al dataGridView, por eso esta puesto

      public Form1()
            {
                InitializeComponent();
                dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Aleatorios", typeof(int));
                dt.Columns.Add("Resultados", typeof(int));
                /*inicializada tabla */
            }

    Y no en button1.click

    Si observase este pedazo de código, en el se le añaden los tipos y nombres de columnas al dataTable, que luego se asocia al datagridview1, por tanto si quieres solo correctos e incorrectos, cambias donde dice Aleatorios, pones correctos, y donde dice Resultados pone Incorrectos.

    Para insertar cada una de las filas al DataTable, solo tienes que cambiar donde dice:

    dt.Rows.Add(i+1+(10*numVecesBoton), aleatorio, correcto); 

    por

    dt.Rows.Add(i+1(10*numvecesBotón), correcto, incorrecto);

    Pero ojo, si observas mi última versión del código, cuando me dijiste que querías volver a dar el botón y que aparecieran más, yo saqué del método la linea int correctos.... y la puse en la propia clase.

    para que estas variables, se inicializaran al entrar en el formulario, y puedan ir acumulando. En tu código, actual, existen correctas, y correcto

    Correcto, que es quien deberia de trabajar, no hace nada, y correctas, es la que suma, pero no acumula.

    Cambialo.

    domingo, 13 de enero de 2019 9:19
  • Hola:

    Para que te deje ver las anteriores.

    El objeto DataTable no se puede inicializar, cada vez que le das al botón, porque esta asociado al dataGridView, por eso esta puesto

      public Form1()
            {
                InitializeComponent();
                dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Aleatorios", typeof(int));
                dt.Columns.Add("Resultados", typeof(int));
                /*inicializada tabla */
            }

    Y no en button1.click

    Si observase este pedazo de código, en el se le añaden los tipos y nombres de columnas al dataTable, que luego se asocia al datagridview1, por tanto si quieres solo correctos e incorrectos, cambias donde dice Aleatorios, pones correctos, y donde dice Resultados pone Incorrectos.

    Para insertar cada una de las filas al DataTable, solo tienes que cambiar donde dice:

    dt.Rows.Add(i+1+(10*numVecesBoton), aleatorio, correcto); 

    por

    dt.Rows.Add(i+1(10*numvecesBotón), correcto, incorrecto);

    Pero ojo, si observas mi última versión del código, cuando me dijiste que querías volver a dar el botón y que aparecieran más, yo saqué del método la linea int correctos.... y la puse en la propia clase.

    para que estas variables, se inicializaran al entrar en el formulario, y puedan ir acumulando. En tu código, actual, existen correctas, y correcto

    Correcto, que es quien deberia de trabajar, no hace nada, y correctas, es la que suma, pero no acumula.

    Cambialo.

    osea que para ver los anteriores 10(despues de tocar 2 veces el button)

    solo tengo que poner esto: 

    public Form1() { InitializeComponent(); dt = new DataTable(); dt.Columns.Add("Total", typeof(int)); dt.Columns.Add("Aleatorios", typeof(int)); dt.Columns.Add("Resultados", typeof(int)); /*inicializada tabla */ }

    en el button ??

    domingo, 13 de enero de 2019 19:19
  • private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));

    //Aca en vez de declararlos si los tengo directamente en el datagridview, cuando haga click, se van a ver los 10 anteriores? (haciendo click 2 veces el button, las anteriores 10 desaparecen)//

                Random rnd = new Random((int)DateTime.Now.Ticks);

                int aleatorio = 0, correctas = 0, incorrectas = 0;
                for (int i = 0; i < 20; i++)
                {

                    aleatorio = rnd.Next(minValue, maxValue); /
                    if (aleatorio >= 8000 && aleatorio <= 8120)
                        correctas++;
                    else
                        incorrectas++;
                  

                    dt.Rows.Add(i + 1 + (10 * numVecesBoton), correctas + (5 * numVecesBoton), incorrectas + (5 * numVecesBoton));
                    //aca el puse 5* al final de ambas , asi me daba bien el resultado, asi quedo perfecto//
                }

                dataGridView1.DataSource = dt;
                dataGridView3.DataSource = dt;

                numVecesBoton++;


            }

            private int getRandom(int min, int max)
            {
                var rnd = new Random();
                return rnd.Next(7800, 8300);

            }

    Asi lo deje , pero como digo , al hacer click se ven los ultimo 10 solamente , como muestro en la siguiente imagen:

    domingo, 13 de enero de 2019 19:23
  • como puedo hacer que en 2 datagridview sean diferentes los números que me da ? 
    domingo, 13 de enero de 2019 19:24
  • Para hacer que los datagidview muestren los datos anteriores(despues de hacer click 2 veces)

    tengo que hacer que el datagridview ya tenga las celdas echas desde antes??

    osea , crear las columnas manualmente?

    Como muestro aqui:

    las primeras 3 son creadas desde > crear columnas sin poner ningun comnado y el segundo es con :

    DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));

    domingo, 13 de enero de 2019 19:30
  • Vamos a ir por partes para poder ir avanzando.

    No a

    private void button1_Click(object sender, EventArgs e)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Correctas", typeof(int));
                dt.Columns.Add("Incorrectas", typeof(int));

    Si a

     public Form1()
            {
                InitializeComponent();
                dt = new DataTable();
                dt.Columns.Add("Total", typeof(int));
                dt.Columns.Add("Aleatorios", typeof(int));
                dt.Columns.Add("Resultados", typeof(int));
                /*inicializada tabla */
            }

    Esto es porque cuando haces click en el botón el dataTable ya esta inicializado, por tanto no genera un nuevo objeto dataTable. Mantiene el viejo así, en vez de 10 filas, cuando pulsas dos veces, el dataTable tiene 20 filas.

    domingo, 13 de enero de 2019 20:11
  • En cuanto al datagridView:

    Las columnas de este modo las define el dataTable, por tanto no hace falta definir las columnas.

    domingo, 13 de enero de 2019 20:12
  • Aún sigo sin saber lo que quieres meter en el dataGridView2

    domingo, 13 de enero de 2019 20:13
  • Aún sigo sin saber lo que quieres meter en el dataGridView2

    Ya me funciono lo otro ,muchisimas gracias.

    Seria hacer lo mismo en 2 datagridview , puse al final

                dataGridView1.DataSource = dt;
                dataGridView2.DataSource = dt;

    pero al darle al button , me da exactamente los mismos numeros:

    domingo, 13 de enero de 2019 22:45
  • Pero cuando te refieres a hacer lo mismo, no es a que este duplicado, sino a hacer 10 filas para el datagridview 1 y 10 filas diferentes pero del mismo modo para el datagridview 2.

    ¿Es eso?

    domingo, 13 de enero de 2019 23:14
  • Pero cuando te refieres a hacer lo mismo, no es a que este duplicado, sino a hacer 10 filas para el datagridview 1 y 10 filas diferentes pero del mismo modo para el datagridview 2.

    ¿Es eso?

    exacto , osea que en ambas de distintos números, pense que poniendo el comando en distintos o duplicarlo me daría distintos, pero son iguales o.o 

    esto lo hago en 2 forms , puse el comando:

    this.Hide();

                Form2 frm = new Form2();

                frm.Show();

    se abre el otro form , pero al volver, la casilla con los 10 numeros esta vacia , pense que con "this.Hide()" solo la ocultaba , no que la cerraba D:! 

    domingo, 13 de enero de 2019 23:18
  • Pero cuando te refieres a hacer lo mismo, no es a que este duplicado, sino a hacer 10 filas para el datagridview 1 y 10 filas diferentes pero del mismo modo para el datagridview 2.

    ¿Es eso?

    exacto , osea que en ambas de distintos números, pense que poniendo el comando en distintos o duplicarlo me daría distintos, pero son iguales o.o 

    esto lo hago en 2 forms , puse el comando:

    this.Hide();

                Form2 frm = new Form2();

                frm.Show();

    se abre el otro form , pero al volver, la casilla con los 10 numeros esta vacia , pense que con "this.Hide()" solo la ocultaba , no que la cerraba D:! 

    al cambiar de form a form 2 directamente todo lo que salio ,se borra

    hay alguna forma de que mientras este activo se mantengan los numeros que se pusieron antes ?

    domingo, 13 de enero de 2019 23:38
  • Hola:

    hide() te lo oculta no te lo borra.

    La opción más fácil, es que cada form tienga su código igual, pero diferente, de manera que datagridview2, tiene otro dataTable.

    En vez de tener el código en el metodo button1.click, extraelo a otro método y desde button1.click, llámalo.

    Haciendo esta operativa, ya podrás invocar a la vez, el código también perteneciente al otro formulario, ya que su dataTable lo llenas con los siguientes valores.

    lunes, 14 de enero de 2019 6:04
  • Hola:

    hide() te lo oculta no te lo borra.

    La opción más fácil, es que cada form tienga su código igual, pero diferente, de manera que datagridview2, tiene otro dataTable.

    En vez de tener el código en el metodo button1.click, extraelo a otro método y desde button1.click, llámalo.

    Haciendo esta operativa, ya podrás invocar a la vez, el código también perteneciente al otro formulario, ya que su dataTable lo llenas con los siguientes valores.

    Hola que tal , de casualidad usted tiene whatsapp , o skype para poder hablarle por ahi ? 
    tuve unos problemas personales y tuve que posponer todo al final , ahora quiero retomar , y creo que es mejor preguntarle por ahi, intento hacer un video para explicarle pero tengo que descargar otro programa para grabar la pantalla de la pc 

    jueves, 14 de febrero de 2019 12:44
  • Hola:

    hide() te lo oculta no te lo borra.

    La opción más fácil, es que cada form tienga su código igual, pero diferente, de manera que datagridview2, tiene otro dataTable.

    En vez de tener el código en el metodo button1.click, extraelo a otro método y desde button1.click, llámalo.

    Haciendo esta operativa, ya podrás invocar a la vez, el código también perteneciente al otro formulario, ya que su dataTable lo llenas con los siguientes valores.

    https://www.youtube.com/watch?v=ieOqAzC8Oio&feature=youtu.be

    justo aca consegui uno, al cambiar de form , se borra lo que puse antes en el datagrid anterior , y quiero usar el ultimo (si toco varias veces y me da 70 como numero final del contador "total" en otro form , pero al intentarlo , no se puede, ya que se desaparecen los contadores :S

    jueves, 14 de febrero de 2019 13:02