none
problema con graficas RRS feed

  • Pregunta

  • estoy presentado problemas con las graficas del visual cuando las ejecuto me arroja este error: No se pueden modificar ahora los objetos secundarios lógicos de este nodo porque se está realizando un examen del árbol.

    si ago la llamada del metodo donde tengo lo de las graficas desde el metodo Loaded del form todo funciona bien, pero si primeroa ago unos calculos y y despues quiero graficar me manda ese error. no se a que se deba. estoy con c# y wpf en visual studio 2010. las graficas son mschart

    jueves, 13 de octubre de 2011 3:54

Respuestas

  • ¡Hola!
     
    En primer lugar te vas al XML y eliminas:
     xmlns:charts="clr-namespace:Visiblox.Charts;assembly=Visiblox.Charts"
    

    Has estado haciendo pruebas y te trabajando con dos tipos de controles chart diferentes (Vamos a trabajar con el de Toolkit). Se cargan de diferente manera y luego a las propiedades que accedes el IDE no sabe que interpretar.
    Entonces ahora tus tag de XML empezaran por:<chartingToolkit:
    Para los controles y componentes de tipo chart
    Vale, ahora te vas al code-behind (al apartado de C#) y pones en la cabecera:
    //using Visiblox.Charts;
    using System.Windows.Controls.DataVisualization.Charting;
    
    Comentando la primera de las líneas que tenías tu puestas.
    Seguimos, la carga del chart se puede hacer de diferentes formas:
    <charting:Chart x:Name="chart">
    
        <charting:Chart.Series>
    
            <charting:ColumnSeries ItemsSource="{Binding}"
    
                                IndependentValueBinding="{Binding Key}"
    
                                DependentValueBinding="{Binding Value}" />
    
        </charting:Chart.Series>
    
    </charting:Chart>
    
    ó en su defecto por código: 
    
    ColumnSeries columnSeries = new ColumnSeries();
    
    columnSeries.SetBinding(ColumnSeries.ItemsSourceProperty, new Binding());
    
    columnSeries.DependentValueBinding = new Binding("Value");
    
    columnSeries.IndependentValueBinding = new Binding("Key");
    
    chart.Series.Add(columnSeries);
    

    Anda, la 1:00 ya de la mañana y mañana madrugo. Bueno, continuamos más tarde. Me he tirado más de una hora buscando tu error (cómo iba a pensar que ibas a mezclar controles...).
    Bueno, para que te lo vayas  pensando en esta entrada David muestra cómo cargar un chart: http://social.msdn.microsoft.com/Forums/es/wpfes/thread/f1cbf106-83e6-4c3a-abf6-e640c4845eae
    Algo similar tienes que hacer, peleate un poco con el código. Ánimo.
    Un saludo,
    • Marcado como respuesta rodolfo1525 domingo, 16 de octubre de 2011 6:40
    sábado, 15 de octubre de 2011 23:11

Todas las respuestas

  • ¡Hola!

    Por favor pon un poco de código, sobretodo la zona de la asignación para que veamos.

     

    Un saludo,

    jueves, 13 de octubre de 2011 16:20
  • el error me sale cuando ejecuto una accion primero. para realizar la grafica necesito primero calcular unos valores. primero obtengo los valores y despues con los valores creo la grafica. la imagen es un ejemplo donde sustitui las variables por datos fijo pero me sige mandando el mismo error

    pero si coloco el codigo que realiza la grafica el metodo load el form si me crea la grafica. en la siguiente imagen use los mismo valores de prueva que la imagen anterior. la unica diferencia es que en la primera realise otras operaciones y depsues la grafica y en esta ise en primer lugar la grafica

     

    viernes, 14 de octubre de 2011 3:54
  • ¡Hola!

    En principio yo no veo nada extraño en tu código. Pon en tus bloques de código try catch para ver si arrojan algo más de luz.

     

    Un saludo,

    viernes, 14 de octubre de 2011 7:22
  • Hola Rodolfo.

    Pon un try catch como comenta corsario a ver si da mas informacion, aunque el error me da que te va a ser igual.

    No se que version de chart usas, en un principio, yo solo veo que pueda haber un conflicto al establecer el contexto de datos cuando aun no se ha cargado el control completamente, con lo que hay que intentar retrasar el establecimiento del contexto, puedes probar a poner lo siguiente a ver que tal:

     

                chart.Loaded += delegate(object sender, RoutedEventArgs e)
                {
                    Histograma(FI);
                }
    

     

    esto colo calo en lugar de llamar directamente a Histograma.

    ¿esa funcion cuando se llama, es un loaded del control o el constructor?, lo digo por que en el constructor no es muy recomendable establecer los contextos de datos, los contextos de datos se deben realizar cuando los controles estan completamente cargados para evitar errores de enlace ya que hay propiedades que se pueden inicializar de forma tardia, de modo que intenta usar el evento Loaded del control especifico.

     


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    viernes, 14 de octubre de 2011 9:09
  • con lo que david me indico no me manda error ni nada, termina el proceso bien pero no crea la grafica. subi el programa y voy a poner el link para que lo puedan analizar mejor

    http://www.megaupload.com/?d=IFKNT9XE

    http://www.mediafire.com/file/d6dzee0l1o3tkb4/ESTADISTICAS.rar

    sábado, 15 de octubre de 2011 0:33
  • ¡Hola!

     

    No has puesto los bloques Try Catch. Pero en fin, ¿puedes comentar que valores introduces y dónde para que podamos reproducir el error?.

    Un saludo,

    sábado, 15 de octubre de 2011 8:12
  • al principio introdusco en el primer texbox un string y en el segundo la cantidad de valores que quiero introducir(si pongo 2 , seme abrira una ventana y tengo que introducir 2 valores)

    la grafica sale en l boton histograma

    sábado, 15 de octubre de 2011 17:37
  • ¡Hola!
     
    En primer lugar te vas al XML y eliminas:
     xmlns:charts="clr-namespace:Visiblox.Charts;assembly=Visiblox.Charts"
    

    Has estado haciendo pruebas y te trabajando con dos tipos de controles chart diferentes (Vamos a trabajar con el de Toolkit). Se cargan de diferente manera y luego a las propiedades que accedes el IDE no sabe que interpretar.
    Entonces ahora tus tag de XML empezaran por:<chartingToolkit:
    Para los controles y componentes de tipo chart
    Vale, ahora te vas al code-behind (al apartado de C#) y pones en la cabecera:
    //using Visiblox.Charts;
    using System.Windows.Controls.DataVisualization.Charting;
    
    Comentando la primera de las líneas que tenías tu puestas.
    Seguimos, la carga del chart se puede hacer de diferentes formas:
    <charting:Chart x:Name="chart">
    
        <charting:Chart.Series>
    
            <charting:ColumnSeries ItemsSource="{Binding}"
    
                                IndependentValueBinding="{Binding Key}"
    
                                DependentValueBinding="{Binding Value}" />
    
        </charting:Chart.Series>
    
    </charting:Chart>
    
    ó en su defecto por código: 
    
    ColumnSeries columnSeries = new ColumnSeries();
    
    columnSeries.SetBinding(ColumnSeries.ItemsSourceProperty, new Binding());
    
    columnSeries.DependentValueBinding = new Binding("Value");
    
    columnSeries.IndependentValueBinding = new Binding("Key");
    
    chart.Series.Add(columnSeries);
    

    Anda, la 1:00 ya de la mañana y mañana madrugo. Bueno, continuamos más tarde. Me he tirado más de una hora buscando tu error (cómo iba a pensar que ibas a mezclar controles...).
    Bueno, para que te lo vayas  pensando en esta entrada David muestra cómo cargar un chart: http://social.msdn.microsoft.com/Forums/es/wpfes/thread/f1cbf106-83e6-4c3a-abf6-e640c4845eae
    Algo similar tienes que hacer, peleate un poco con el código. Ánimo.
    Un saludo,
    • Marcado como respuesta rodolfo1525 domingo, 16 de octubre de 2011 6:40
    sábado, 15 de octubre de 2011 23:11
  • CorsarioVasco te pasaste pero sigo teniendo el error cuando lo llamo de un metodo que no es _Loaded

     

    la solucion que me recomendo David_Gonzales no me esta funcionando, se salta la intruccion porque no esta cargado el chart y nunca ejecuta el metodo Histograma 

    chart.Loaded += delegate(object sender, RoutedEventArgs e)
                {
                    Histograma(FI);
                }

    use un while para que continuara cuando abia cargado el chart pero se quedaba infinitamente

     


    • Editado rodolfo1525 domingo, 16 de octubre de 2011 6:32
    domingo, 16 de octubre de 2011 6:28
  • alguien sabe como hacer que todas las columnas esten una alado de la otra. que no tengan espacio entre ellas
    domingo, 16 de octubre de 2011 7:50
  • ¡Hola!

    En primer lugar comentarte que la propuesta de David es acertada con la información que aportabas al principio (es de alguien que tiene mucha experiencia en este campo). Si David hubiera tenido tiempo de echarle un vistazo a tu proyecto hubiera llegado a la conclusión que yo llegué ayer. En todo momento estas empleando un ensamblado: xmlns:charts="clr-namespace:Visiblox.Charts;assembly=Visiblox.Charts" y realizas la carga como un Chart del ToolKit. Son diferentes Charts y por consiguiente disponen de diferentes métodos y diferentes propiedades. Por ponerte un ejemplo: Visiblox no dispone de un ItemSource en las series.

    Después del tiempo perdido haciendo comprobaciones y tras los cambios que te comentaba en la anterior entrada el error me lo daba ese control de menú. Por lo visto no acepta valores nulos (vete a saber por qué, ya era muy tarde y decidí acostarme).

    Bueno, hoy me he puesto analizar todo el código porque me extrañaba que tardara tanto en debuggear la aplicación. Lo que he visto no me ha gustado mucho. No me voy a meter de que no apliques el patrón VMW porque es un ejercicio sencillo, pero hay cosas que deberías de hacer y, que yo te aconsejo que hagas. Cada maestro tiene su librillo. Que te gusta, lo adaptas, que no o que no estás de acuerdo, pues pasas de ello.

    Emplea bloques try catch para recuperar los errores. En tu código veo que pasas el formulario a tu ventana. Uhmmm, si sólo recuperas un dato en la segunda ventana. Lo normal es que trabajes con el formulario principal y que sólo recuperes en una propiedad, cuando se cierre la ventana, el valor. Ventajas, para mi, es la legibilidad del código. Hay otras, no tienes que pasar todas las variables (pasas un formulario entero) cuando sólo necesitas dos variables y un retorno.

    Emplea Listas en vez de arrays porque de esta manera no tienes el inconveniente de preocuparte del tamaño. Tú sólo podías introducir 100 datos; ya que lo habías fijado así.

    Más, para hacer cosas sencillas no te compliques la vida y emplea controles "normales". Y me refiero con esto a que a ti te interesa la funcionalidad del programa, que es para un ejercicio de la universidad. Cuando funcione, ya habrá momento para ponerlo elegante y complicarte la vida.

    Respecto a lo de las columnas. Tienes principalmente dos opciones (que se me ocurren ahora mismo), o editas el Template del Chart (requiere cierto dominio) y te creas uno que te permita agrupar las columnas o empleas las SerieArea el cual si repites puntos es muy posible que puedas conseguir el escalonado realizando unas cuantas series.

    Bueno, demasiada chapa, ¿no?. Estamos de acuerdo. ¿Y ahora qué?. Podía haber seguido con tu proyecto pero visto lo visto no me convencía. Asi que me he permitido el capricho de realizar el mío. Creo que me iba a ser más rápido que encontrar el error en el menú. Te lo dejo en: https://skydrive.live.com/?cid=81c429ca4b9fb876#!/?cid=81c429ca4b9fb876&sc=documents&uc=1&id=81C429CA4B9FB876%21293 Por si te interesa.

    Sencillo, sin menús. Centrándome en tu caso. Como el tema de los cálculos no lo controlo porque no sé qué es lo que quieres hacer (creo que el rango se calcula con todos los datos no con un único dato. Me da que lo estabas haciendo mal. Me llevaría un tiempo ponerme al día de mis clases de estadística en la universidad). Te he dejado indicado el punto dónde se realizan los cálculos y luego he simulado la carga de una gráfica con SerieArea.

    Espero que te ilumine en algo esta entrada. Un saludo,

    domingo, 16 de octubre de 2011 21:12
  • el codigo de david esta bien. lo que pasaba es que abia definido el evento loaded del chart, lo elimine y funciono de maravilla. la verdad es que estoy empesando con wpf y poco a poco estoy aprendiendo, quise hacer el menu para ver que tal me iba. 

    te agradesco mucho tu tiempo. te quedaste hasta la 1:00 de la madrugada mirando mi codigo waooo te lo agradesco.

    analizare tu codigoo y te comentare. tomare en cuenta tus criticas ya que me parecen que estan en todo lo correcto. gracias

    domingo, 16 de octubre de 2011 21:31
  • Ánimo, y ya nos cuentas.

    Saludos,

    domingo, 16 de octubre de 2011 22:24