VB:NET Dolar alış satış değerlerini grafik olarak gösterme nasıl

Bu konuyu okuyanlar

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Programım bir bankanın döviz kurlarını canlı olarak okuyor yani her dakika okuyor bunları xml dosyasına kaydediyor yapmak istediğim C1.Win.C1Chart.2 componentini kullanarak bankanın USD alış ve satış grafiğini canlı olarak görmek ancak bu işlemi yapamadım sorun değerler grafikte doğru görüntülenmiyor, yardım edermisiniz aşağıda bu komponentin üreticisinin verdiği koduda ekledim.

Bu benim kodum
Kod:
Imports System.Net.Mime.MediaTypeNames
Imports System.Xml
Imports System.ComponentModel
Imports System.Media
Imports C1.Win.C1Chart
Public Class Form1
    Dim doc As New XmlDocument()
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        doc.Load(System.Windows.Forms.Application.StartupPath & "\Liste.xml")
        XmlOku()
        Timer1.Start()
    End Sub
    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        WebBrowser1.Navigate("http://www.finansbank.enpara.com/doviz-kur-bilgileri/doviz-altin-kurlari.aspx")
    End Sub
    Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
        Dim Liste As New List(Of String)
        For Each ae As HtmlElement In WebBrowser1.Document.All
            If ae.GetAttribute("classname").Contains("dlCont") Then
                Liste.Add(ae.InnerText.ToString)
            End If
        Next
        Dim root As XmlNode = doc.SelectSingleNode("//Doviz/Kurlar")
        If root Is Nothing Then
            'if this is a new document create root
            root = doc.SelectSingleNode("//liste")
        Else
            'create node
            'get root node named users
            Dim kullanıcıDalı As XmlElement = CType(doc.SelectSingleNode("//Doviz/Kurlar"), XmlElement)
            'add the new node
            Dim yeniDal As XmlElement = doc.CreateElement("liste")
            'add attributes
            yeniDal.SetAttribute("ID", OlmayanID().ToString)
            '1. SÜTUN
            Dim altDal As XmlElement = doc.CreateElement("isim")
            altDal.InnerText = Liste(0)
            yeniDal.AppendChild(altDal)
            ' 2. SÜTUN
            altDal = doc.CreateElement("tarih")
            Dim Bugun As Date = DateTime.Today
            altDal.InnerText = Bugun.ToString("d")
            yeniDal.AppendChild(altDal)
            ' 3. SÜTUN
            altDal = doc.CreateElement("saat")
            Dim Saat1 As Date = DateTime.Now
            altDal.InnerText = Saat1.ToString("T")
            yeniDal.AppendChild(altDal)
            ' 4. SÜTUN
            altDal = doc.CreateElement("alis")
            Dim USD_al As String = Liste(2)
            USD_al = Replace(Replace(USD_al, " TL ", ""), ",", ".")
            altDal.InnerText = USD_al
            yeniDal.AppendChild(altDal)
            ' 5. SÜTUN
            altDal = doc.CreateElement("satis")
            Dim USD_sat As String = Liste(3)
            USD_sat = Replace(Replace(USD_sat, " TL ", ""), ",", ".")
            altDal.InnerText = USD_sat
            yeniDal.AppendChild(altDal)
            kullanıcıDalı.AppendChild(yeniDal)
        End If
        doc.Save(System.Windows.Forms.Application.StartupPath & "\Liste.xml")
        XmlOku()
         SystemSounds.Beep.Play()

    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim dt As New DataTable
        dt.Columns.Add("ID", GetType(Integer))
        dt.Columns.Add("Isim", GetType(String))
        dt.Columns.Add("Tarih", GetType(String))
        dt.Columns.Add("Saat", GetType(String))
        dt.Columns.Add("Alis", GetType(String))
        dt.Columns.Add("Satıs", GetType(String))
        Dim nodeList As XmlNodeList = doc.SelectNodes("//Doviz/Kurlar/liste")
        Dim node As XmlNode
        For Each node In nodeList
            Dim row As String() = New String() {node.Attributes("ID").Value.ToString(), _
                                                node.ChildNodes.Item(0).InnerText.Trim(), _
                                                node.ChildNodes.Item(1).InnerText.Trim(), _
                                                node.ChildNodes.Item(2).InnerText.Trim(), _
                                                node.ChildNodes.Item(3).InnerText.Trim(), _
                                                node.ChildNodes.Item(4).InnerText.Trim()}
            dt.Rows.Add(row)
        Next
        ' clear data series collection
        Me.C1Chart1.DataSource = dt
        Dim dsc As ChartDataSeriesCollection = C1Chart1.ChartGroups(0).ChartData.SeriesList
        dsc.Clear()
        ' add unit price series
        Dim ds As ChartDataSeries = dsc.AddNewSeries()
        'ds.AutoEnumerate = True ' (in case you don't want to set the X values)
        ds.X.DataField = "Alis"
        '  ds.Y.DataField = ""
        ds.Y.CopyDataIn(New String() {"0", _
                                                "1", _
                                                "2", _
                                                "3", _
                                               "4", _
                                               "5"})
        ' add units in stock series
        '   ds = dsc.AddNewSeries()
        '  ds.X.DataField = "ID"
        '  ds.Y.DataField = "Satis"
    End Sub
    Public Sub XmlOku()
        ' Her okumada varsa satırların silinmesi gerek
        Me.DataGridView1.Rows.Clear()
        Me.DataGridView1.ColumnCount = 6
        Me.DataGridView1.Columns(0).Name = "ID"
        Me.DataGridView1.Columns(1).Name = "isim"
        Me.DataGridView1.Columns(2).Name = "tarih"
        Me.DataGridView1.Columns(3).Name = "saat"
        Me.DataGridView1.Columns(4).Name = "alis"
        Me.DataGridView1.Columns(5).Name = "satis"
        Dim nodeList As XmlNodeList = doc.SelectNodes("//Kurlar/liste")
        Dim node As XmlNode
        For Each node In nodeList
            Dim row As String() = New String() {node.Attributes("ID").Value.ToString(), _
                                                node.ChildNodes.Item(0).InnerText.Trim(), _
                                                node.ChildNodes.Item(1).InnerText.Trim(), _
                                                node.ChildNodes.Item(2).InnerText.Trim(), _
                                                node.ChildNodes.Item(3).InnerText.Trim(), _
                                                node.ChildNodes.Item(4).InnerText.Trim()}
            Me.DataGridView1.Rows.Add(row)
        Next
    End Sub
    Public Function OlmayanID() As Integer
        ' ****************Attribute Adedi Öğrenilir ******************
        Dim toplamadet As Integer 'element.Attributes.Count komutu işe yaramadığından adedi öğrenmek için bu kodu yazdım
        For Each element As XmlElement In doc.SelectNodes("//Doviz/Kurlar/liste")
            For Each attribute As XmlAttribute In element.Attributes
                If attribute.ToString = "" Then
                Else
                    toplamadet = toplamadet + 1
                End If
            Next
        Next
        ' ************************************************************
        ' Olmayan ID numarasını bulma kodunun mantığı çok basittir var olan ID'ler okunur
        ' 1 varmı? varsa 2 varmı? varsa 3 varmı? yoksa, 3 değeri OlmayanID() atanır bukadar basit
        ' olmayan rakam bulununca GoTo 2 ile tüm döngüden çıkılır
        Dim sayaç As New Integer
        Dim xXx As Integer = 0 ' Numaralandırma hangi rakamdan başlasın ben 0 yaptım verilen rakamın altındakiler dışlanır bu nedenle 0 yada 1 olmalıdır
1:
        For Each element As XmlElement In doc.SelectNodes("//Doviz/Kurlar/liste")
            For Each değer As XmlAttribute In element.Attributes
                sayaç = sayaç + 1
                If xXx.ToString = değer.Value.ToString Then
                    xXx = xXx + 1
                    sayaç = 0
                    GoTo 1
                End If
                If sayaç.ToString = toplamadet.ToString Then
                    OlmayanID = xXx
                    GoTo 2
                End If
            Next
        Next
2:
        toplamadet = 0
    End Function

End Class
XML Dosyası
Kod:
<?xml version="1.0" encoding="UTF-8"?>
<Doviz>
  <Kurlar>
    <liste ID="0">
      <isim>USD</isim>
      <tarih>17.08.2016</tarih>
      <saat>14:33:03</saat>
      <alis>2.930750</alis>
      <satis>2.936250</satis>
    </liste>
    <liste ID="1">
      <isim>USD</isim>
      <tarih>17.08.2016</tarih>
      <saat>14:33:07</saat>
      <alis>2.930750</alis>
      <satis>2.936250</satis>
    </liste>
    <liste ID="2">
      <isim>USD</isim>
      <tarih>17.08.2016</tarih>
      <saat>14:33:12</saat>
      <alis>2.930750</alis>
      <satis>2.936250</satis>
    </liste>
    <liste ID="3">
      <isim>USD</isim>
      <tarih>17.08.2016</tarih>
      <saat>14:33:17</saat>
      <alis>2.930750</alis>
      <satis>2.936250</satis>
    </liste>
  </Kurlar>
</Doviz>

Kendi sitesinde yöntemlerden 2 yada 3'ü aşağıdaki linkte
Loading and Extracting Chart Data

Benim Yaralandığım kod aşağıda kendi üreticisinin kodu
Kod:
' DataBinding is only available with C1Chart
' version 1.0.20034.13244 and later.
' get chart data
Dim sql As String = "select * from products"
Dim conn As String = "provider=… nwind.mdb" '
Dim da As New OleDbDataAdapter(sql, conn)
da.Fill(dt)
' bind chart to table (each series will bind to a field on the table)_ c1chart.DataSource = dt
' clear data series collection
Dim dsc As ChartDataSeriesCollection = c1chart.ChartGroups(0).ChartData.SeriesList
dsc.Clear()
' add unit price series
Dim ds As ChartDataSeries = dsc.AddNewSeries()
'ds.AutoEnumerate = true' (in case you don't want to set the X values)
ds.X.DataField = "ProductName"
ds.Y.DataField = "UnitPrice"
' add units in stock series
ds = dsc.AddNewSeries()
ds.X.DataField = "ProductName"
ds.Y.DataField = "UnitsInStock"
' apply filters, sorting, etc
dt.DefaultView.RowFilter = "CategoryID = 4"
Çok ayrıntılı doküman aşağıdaki linkte (PDF formatında)
http://componentone.co.kr/files/Documentation/Winforms_Chart.pdf
 

Vatansever

Asistan
Katılım
23 Ağustos 2007
Mesajlar
405
Reaksiyon puanı
1
Puanları
18
Nooolursunuz yardım edin :( istediğim her dakika dolar alış değerini grafikte göstermek, aşağıda çok basit bir proje hazırladım bunu inceleyin lütfen Dll dosyası içinde dll referansını projenin içinden vermeniz gerek yoksa çalışmaz VS2010 VB.NET projesidir.



Download Grafik Gosterim zip
 
Üst