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
XML Dosyası
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
Çok ayrıntılı doküman aşağıdaki linkte (PDF formatında)
http://componentone.co.kr/files/Documentation/Winforms_Chart.pdf
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
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"
http://componentone.co.kr/files/Documentation/Winforms_Chart.pdf