Principales respuestas
problema con graficas

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
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 chartVale, 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-e640c4845eaeAlgo 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
Todas las respuestas
-
-
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
-
-
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/
- Editado David_González viernes, 14 de octubre de 2011 9:10
-
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
-
-
-
¡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 chartVale, 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-e640c4845eaeAlgo 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
-
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
-
-
¡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,
-
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
-