none
Obtener el grafico que se genera de un datagridview RRS feed

  • Pregunta

  • Buen Dia;

    Si el dgv2 cambia el grafico tambien cambiara

    Esto es de un excel entonces es parte de grafico.

    basado en el dgv2 de la anterior pregunta

    Necesito obtener un grafico de esta forma hasta ahora no he manejado grafico chart asi que estoy perdido.

    Esto es el grafico de excel el cuadro se ve actualmente igual ahora necesito lograr obtener ese grafico y bueno si modifico el rango del dgv1 se modificara las cuentas del dgv2 lo que hara que el grafico tambien cambie.


    De lo cual yo solo tengo la tabla y el grafico no hay

    Saludos
    lunes, 26 de marzo de 2018 2:55

Respuestas

  • hola javier

    debes de tener en cuenta que solo vas a refrescar el chat1 data source osea el codigo deberia ser asi en el databinding complete

            private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
            {
    
    
                // Se carga el datatable con al chart
                chart1.DataSource = oDatatable;
    
                // se definen los miembros de series para valores X , Y
                chart1.Series[0].XValueMember = "Cliente";
                chart1.Series[0].YValueMembers = "Cuenta";
    
                //se bindea los datos de la fuente de datos seleccionadato the selected data source
                chart1.DataBind();
            }

    recuerda ordenar el oDatatable siempre antes de mandarlo al chart1.datasource

    • Marcado como respuesta Javier Roque martes, 27 de marzo de 2018 13:01
    lunes, 26 de marzo de 2018 19:20

Todas las respuestas

  • hola

    digamos que tienes el datatable definido...

            static DataTable ObtenerDatos() 
            {
    
            DataTable table = new DataTable();
    
    
            table.Columns.Add("Cliente", typeof(string));
            table.Columns.Add("Cuenta", typeof(int));
    
            table.Rows.Add("savia peru s.a.", 46);
            table.Rows.Add("pacific offshore peru sa", 8);
            table.Rows.Add("cnpc sapet", 10);
            table.Rows.Add("negrill contratistas generales eirl", 1);
            table.Rows.Add("IQS SAC", 2);
            table.Rows.Add("Julio Crespo Peru SAC", 1);
            table.Rows.Add("jorge La Torre Palacios", 1);
            return table;
    
            
            }

    luego en el evento Load del form o en el evento que gustes colocar el chart

            private void Form1_Load(object sender, EventArgs e)
            {
                //se carga el datatable
                DataTable DtableClienteMes = ObtenerDatos();
    
                // se hace un ordenamiento de los datos
                DataView dv = DtableClienteMes.DefaultView;
                dv.Sort = "Cuenta desc";
                DataTable sortedDT = dv.ToTable();
    
                dataGridView1.DataSource = DtableClienteMes;
    
                // Se carga el datatable con al chart
                chart1.DataSource = DtableClienteMes;
    
                // se definen los miembros de series para valores X , Y
                chart1.Series[0].XValueMember = "Cliente";
                chart1.Series[0].YValueMembers = "Cuenta";
    
                //se bindea los datos de la fuente de datos seleccionadato the selected data source
                chart1.DataBind();
    }


    lunes, 26 de marzo de 2018 18:38
  • supongo que el evento seria del DataBindingComplete ya que es respecto a dgv2 y cuando este cambia el chart debe cambiar automatico. 

    Pero bueno probando el ejemplo se queda colgado 

    Excepción no controlada del tipo 'System.StackOverflowException' en System.Windows.Forms.dll

    dgvSolicitud.DataSource = DtableClienteMes
    Claro que mi dt se llama oDatatable el dt que llena la dgv2

    lunes, 26 de marzo de 2018 18:50
  • hola javier

    debes de tener en cuenta que solo vas a refrescar el chat1 data source osea el codigo deberia ser asi en el databinding complete

            private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
            {
    
    
                // Se carga el datatable con al chart
                chart1.DataSource = oDatatable;
    
                // se definen los miembros de series para valores X , Y
                chart1.Series[0].XValueMember = "Cliente";
                chart1.Series[0].YValueMembers = "Cuenta";
    
                //se bindea los datos de la fuente de datos seleccionadato the selected data source
                chart1.DataBind();
            }

    recuerda ordenar el oDatatable siempre antes de mandarlo al chart1.datasource

    • Marcado como respuesta Javier Roque martes, 27 de marzo de 2018 13:01
    lunes, 26 de marzo de 2018 19:20
  • El grafico me sale vacio
    lunes, 26 de marzo de 2018 19:48
  • Bueno no sale nada en el chart si elijo el tipo de chart es decir bar sale una X en el grafico como arriba 

    parece que estas utilizando otro control, talvez una image o picturebox?

    porque me parece raro, ya que yo hice el datatable que te mostre y agregue el control chart y funciona! tienes el chartype asi?

     chart1.ChartType = SeriesChartType.Bar;

    a mi me funciona bien

    lunes, 26 de marzo de 2018 20:12
  • Private Sub dgvSolicitud_DataBindingComplete(sender As Object, e As DataGridViewBindingCompleteEventArgs) Handles dgvSolicitud.DataBindingComplete
            
            GSolicitud.Series(0).ChartType = SeriesChartType.Bar
            GSolicitud.Series(0).Color = Color.Lime
            ' se definen los miembros de series para valores X , Y
            GSolicitud.Series(0).XValueMember = "Cliente"
            GSolicitud.Series(0).YValueMembers = "Cuenta"
            'se bindea los datos de la fuente de datos seleccionadato the selected data source
            GSolicitud.DataBind()
            ' Se carga el datatable con al chart
            GSolicitud.DataSource = oDataTable
    
        End Sub
    sera que nose tengo un datagriv1 y este me genera un dgv2 de este dvg2 quiero sacar el grafico el odatatable lo uso en ambos casos entonces  quizas por alli el problema



    lunes, 26 de marzo de 2018 20:16

  • .. odatatable lo uso en ambos casos entonces  quizas por alli el problema



    Mira bien el código primero es el DataSource y luego el DataBind()

    Private Sub dgvSolicitud_DataBindingComplete(sender As Object, e As DataGridViewBindingCompleteEventArgs) Handles dgvSolicitud.DataBindingComplete
            
            GSolicitud..ChartType = SeriesChartType.Bar
            GSolicitud.Series(0).Color = Color.Lime
          '****se define el datasource
            GSolicitud.DataSource = oDataTable
    
            ' se definen los miembros de series para valores X , Y
            GSolicitud.Series(0).XValueMember = "Cliente"
            GSolicitud.Series(0).YValueMembers = "Cuenta"
            'se bindea los datos de la fuente de datos seleccionadato the selected data source
            GSolicitud.DataBind()
          
    
        End Sub
    creo que sea tu problema?


    lunes, 26 de marzo de 2018 21:09
  • Bueno he logrado obtener las otras imagenes menos ese el problema es el dt lo usan 2 tablas como decirle a al grafico es.
    martes, 27 de marzo de 2018 21:20