none
Grafica Silverlight Chart RRS feed

  • Pregunta

  • Hola muchachos tengo una consulta silverlight a la hora de crar una gráfica tipo Chart (Es decir de barras), mediante un web service.

    ----------------------------------------------------------------

    El código en XAML es:

     <toolkit:Chart Canvas.Top="80" Canvas.Left="10" x:Name="Chart0" Width="600" Height="300" Background="LightSteelBlue">
                <toolkit:Chart.Series>
                    <toolkit:ColumnSeries Title="Fuentes D.B Estadisticas"  AnimationSequence="FirstToLast"  ItemsSource="{Binding}" IndependentValueBinding="{Binding Path=Pais}" DependentValueBinding="{Binding Path=NoVisitas}">
                    </toolkit:ColumnSeries>
                </toolkit:Chart.Series>
            </toolkit:Chart>


    ---------------------------------------

    El web service se llama GroupByCountry; en el Codebehind lo hago de la siguiente forma asincrona:

     Private Sub LayoutRoot_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles LayoutRoot.Loaded
            Dim ObjServicios As New SilverlightApplication.ServiceReference1.WebServicesSoapClient
            AddHandler ObjServicios.GroupByCountryCompleted, AddressOf GroupByCountryCompleted
            ObjServicios.GroupByCountryAsync("01/01/2009", "12/01/2010")
    End Sub

    Public Sub GroupByCountryCompleted(ByVal sender As Object, ByVal e As ServiceReference1.GroupByCountryCompletedEventArgs)

            Chart0.DataContext = e.Result
          
        End Sub

    ------------------------------------------------------------------

    "Chart0" es el nombre de la gráfica, pero no me sale nada!!! Puede alguien echarme una mano????

     

    martes, 27 de julio de 2010 2:17

Respuestas

  • Hola victorbustos

    Añade el ItemsSource a la linea del Toolkit:

    e.Result es una DataTable o un DataSet, o es otro tipo???

    Si es un DataSet, lo mejor es que asignases al DataContext directamente la tabla dentro del dataset que necesitas usar, algo así:

    Public Sub GroupByCountryCompleted(ByVal sender As Object, ByVal e As ServiceReference1.GroupByCountryCompletedEventArgs)
        Chart0.DataContext = ctype(e.Result, Dataset).Tables(0)
    End Sub

    En caso de que tu dataset sea tipado, usa el tipo de tu dataset en el CType y el nombre de la tabla.

    Otra opción es que en el Path del binding asignes el nombre de la tabla:

    <toolkit:ColumnSeries Title="Fuentes D.B Estadisticas" AnimationSequence="FirstToLast" ItemsSource="{Binding Path=NOMBRE_TABLA}" IndependentValueBinding="{Binding Path=Pais}" DependentValueBinding="{Binding Path=NoVisitas}">
    
    

    Aquí te dejo un enlace a un artículo que hice sobre enlace a datos en WPF para que veas las distintas combinaciones que puedes hacer:

    http://jyeray.blogspot.com/2010/05/net-4-wpf-descubriendo-la-potencia-de.html

    Espero haberte sido útil, un gran saludo!!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    martes, 27 de julio de 2010 4:32
    Moderador

Todas las respuestas

  • Hola victorbustos

    Añade el ItemsSource a la linea del Toolkit:

    e.Result es una DataTable o un DataSet, o es otro tipo???

    Si es un DataSet, lo mejor es que asignases al DataContext directamente la tabla dentro del dataset que necesitas usar, algo así:

    Public Sub GroupByCountryCompleted(ByVal sender As Object, ByVal e As ServiceReference1.GroupByCountryCompletedEventArgs)
        Chart0.DataContext = ctype(e.Result, Dataset).Tables(0)
    End Sub

    En caso de que tu dataset sea tipado, usa el tipo de tu dataset en el CType y el nombre de la tabla.

    Otra opción es que en el Path del binding asignes el nombre de la tabla:

    <toolkit:ColumnSeries Title="Fuentes D.B Estadisticas" AnimationSequence="FirstToLast" ItemsSource="{Binding Path=NOMBRE_TABLA}" IndependentValueBinding="{Binding Path=Pais}" DependentValueBinding="{Binding Path=NoVisitas}">
    
    

    Aquí te dejo un enlace a un artículo que hice sobre enlace a datos en WPF para que veas las distintas combinaciones que puedes hacer:

    http://jyeray.blogspot.com/2010/05/net-4-wpf-descubriendo-la-potencia-de.html

    Espero haberte sido útil, un gran saludo!!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    martes, 27 de julio de 2010 4:32
    Moderador
  • Hola Josue gracias por responder, si tenias razón me faltaba el tag
     ItemsSource
    =
    "
    {Binding Path=NOMBRE_TABLA}
    "

    Ahora la pregunta es el el codebehing, como enlazo los datos con el web service??

    ------------------------------------------------------

    El web service se llama GroupByCountry; en el Codebehind lo hago de la siguiente forma asincrona:

     Private Sub LayoutRoot_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles LayoutRoot.Loaded
            Dim ObjServicios As New SilverlightApplication.ServiceReference1.WebServicesSoapClient
            AddHandler ObjServicios.GroupByCountryCompleted, AddressOf GroupByCountryCompleted
            ObjServicios.GroupByCountryAsync("01/01/2009", "12/01/2010")
    End Sub

    Public Sub GroupByCountryCompleted(ByVal sender As Object, ByVal e As ServiceReference1.GroupByCountryCompletedEventArgs)

            Chart0.DataContext = e.Result
          
        End Sub

    ------------------------------------------------------------------

    "Chart0 " es el nombre de la gráfica, pero no me sale nada...

     

    martes, 27 de julio de 2010 22:47
  • hola victorbustos

    ¿Que contiene exactamente e.Result? ¿un dataset?, o que exactamente?

    Un gran saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    miércoles, 28 de julio de 2010 4:56
    Moderador
  • Contiene una lista de una clase especifica que te anexo aca:

    -----------------------------------------------------

    Public Class VisitasPais
        Private Property _Pais As String
        Public Property Pais() As String
            Get
                Return _Pais
            End Get
            Set(ByVal Value As String)
                _Pais = Value
            End Set
        End Property

        Private Property _NoVisitas As Integer
        Public Property NoVisitas() As Integer
            Get
                Return _NoVisitas
            End Get
            Set(ByVal Value As Integer)
                _NoVisitas = Value
            End Set
        End Property
        Public Sub New()

        End Sub
        Public Sub New(ByVal Pais As String, ByVal NoVisitas As Integer)
            Me.Pais = Pais
            Me.NoVisitas = NoVisitas
        End Sub
    End Class

    ------------------------------------------------------------------

    El Web service crea una lista del tipo "VisitasPais" y ese es el resultado del web service en el procedimiento asincrono:

    Public Sub GroupByCountryCompleted(ByVal sender As Object, ByVal e As ServiceReference1.GroupByCountryCompletedEventArgs)

            Chart0.DataContext = e.Result
          
        End Sub

     

    miércoles, 28 de julio de 2010 15:59
  • Hola!

    Al ser una clase no hace falta que especifiques en el itemsSource el nombre de la tabla (pues no hay) dejandolo así debería llegar:

     <toolkit:Chart Canvas.Top="80" Canvas.Left="10" x:Name="Chart0" Width="600" Height="300" Background="LightSteelBlue" itemsSource="{Binding}">
          <toolkit:Chart.Series>
            <toolkit:ColumnSeries Title="Fuentes D.B Estadisticas" AnimationSequence="FirstToLast" ItemsSource="{Binding}" IndependentValueBinding="{Binding Path=Pais}" DependentValueBinding="{Binding Path=NoVisitas}">
            </toolkit:ColumnSeries>
          </toolkit:Chart.Series>
     </toolkit:Chart>
    

    Lo que puedes hacer es cambiar lo que devuelve el servicio Web de una list<of T> por una ObservableCollection<of T>, que tiene notificación de cambios.

    Un gran saludo!

     


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog
    Sigueme en Twitter
    jueves, 29 de julio de 2010 7:32
    Moderador
  • Recuerda que lo estoy haciendo con Web services, entonces lo que necesito es saber como enlazo en el codebehind la grafica?
    domingo, 1 de agosto de 2010 16:32