Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ' ----------------------------
- ' Form Code
- ' ----------------------------
- Imports System.Data
- Imports System.Globalization
- Imports System.IO
- Imports Newtonsoft.Json
- Public Class frmJsonToDatatTable
- Private binanceSource As BindingSource = Nothing
- Private binanceData As DataTable = Nothing
- Private jsonPath As String = Path.Combine(Application.CommonAppDataPath, "BinanceData.json")
- Public Sub New()
- InitializeComponent()
- InitializeDataSource()
- InitializeBinanceUI()
- End Sub
- Private Sub InitializeDataSource()
- If File.Exists(jsonPath) Then
- Dim settings = New JsonSerializerSettings() With {
- .FloatParseHandling = FloatParseHandling.Decimal
- }
- Dim json = File.ReadAllText(jsonPath)
- Dim dt = JsonConvert.DeserializeObject(Of DataTable)(json, settings)
- If dt IsNot Nothing AndAlso dt.Columns.Count > 0 Then
- dt.Columns(0).AutoIncrement = True
- dt.Columns(0).AutoIncrementSeed = CType(dt.Rows(dt.Rows.Count - 1)("Index"), Long) + 1
- dt.Columns(0).AutoIncrementStep = 1
- binanceData = dt
- Return
- End If
- End If
- binanceData = New DataTable("BinanceData")
- binanceData.Columns.Add(New DataColumn() With {
- .DataType = GetType(Long),
- .ColumnName = "Index",
- .AutoIncrement = True,
- .AutoIncrementSeed = 1,
- .AutoIncrementStep = 1
- })
- binanceData.Columns.Add("Date", GetType(Date))
- binanceData.Columns.Add("Pair", GetType(String))
- binanceData.Columns.Add("Type", GetType(String))
- binanceData.Columns.Add("Side", GetType(String))
- binanceData.Columns.Add("Average", GetType(Decimal))
- binanceData.Columns.Add("Price", GetType(Decimal))
- binanceData.Columns.Add("Executed", GetType(Decimal))
- binanceData.Columns.Add("Amount", GetType(Decimal))
- binanceData.Columns.Add("Total", GetType(Decimal))
- End Sub
- Private Sub InitializeBinanceUI()
- AddHandler dgvBinance.CellFormatting, AddressOf dgvBinanceCellFormatting
- binanceSource = New BindingSource(binanceData, "")
- dgvBinance.DataSource = binanceSource
- dgvBinance.Columns("Date").DefaultCellStyle.Format = "MM-dd H:mm:ss"
- dgvBinance.Columns("Average").DefaultCellStyle.Format = "N5"
- dgvBinance.Columns("Price").DefaultCellStyle.Format = "N5"
- dgvBinance.Columns("Executed").DefaultCellStyle.Format = "N1"
- dgvBinance.Columns("Amount").DefaultCellStyle.Format = "N1"
- dgvBinance.Columns("Total").DefaultCellStyle.Format = "N5"
- End Sub
- Private Function BinanceParseCopyData(input As String, dataSource As DataTable) As Integer
- Dim culture = CultureInfo.InvariantCulture
- input.Trim({ChrW(13), ChrW(10), ChrW(32)})
- Dim allData = input.Split({vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
- If allData.Length Mod 9 <> 0 Then
- Throw New FormatException($"Unexpected Data Format. A Data Row must be composed of 9 Columns. Found {allData.Length}")
- End If
- Dim rowsCount As Integer = 0
- For pos As Integer = 0 To allData.Length - 1 Step 9
- Dim row As Object() = New Object(9) {}
- Array.Copy(allData, pos, row, 1, 9)
- row(1) = Date.ParseExact(row(1).ToString().Trim(), "MM-dd H:mm:ss", culture)
- row(2) = row(2).ToString().Trim()
- row(3) = row(3).ToString().Trim()
- row(4) = row(4).ToString().Trim()
- row(5) = Decimal.Parse(row(5).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
- row(6) = Decimal.Parse(row(6).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
- row(7) = Decimal.Parse(row(7).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
- row(8) = Decimal.Parse(row(8).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
- row(9) = Decimal.Parse(row(9).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
- dataSource.Rows.Add(row)
- rowsCount += 1
- Next
- Return rowsCount
- End Function
- Private Sub SaveBinanceDataTable()
- Dim json As String = JsonConvert.SerializeObject(binanceData, Formatting.Indented)
- File.WriteAllText(jsonPath, json)
- End Sub
- Private Sub BinanceWebCopyToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BinanceWebCopyToolStripMenuItem.Click
- Dim sourceData = Clipboard.GetText(TextDataFormat.Text)
- Dim rowsAdded = BinanceParseCopyData(sourceData, binanceData)
- End Sub
- Private Sub dgvBinanceCellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs)
- If e.Value Is Nothing OrElse dgvBinance.Columns(e.ColumnIndex).Name <> "Side" Then Return
- e.CellStyle.ForeColor = If(e.Value.ToString().Equals("Buy"), Color.Green, Color.Red)
- End Sub
- Private Sub frmJsonToDatatTable_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
- SaveBinanceDataTable()
- End Sub
- End Class
- ' ----------------------------
- ' Form Designer
- ' ----------------------------
- <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
- Partial Class frmJsonToDatatTable
- Inherits System.Windows.Forms.Form
- <System.Diagnostics.DebuggerNonUserCode()>
- Protected Overrides Sub Dispose(ByVal disposing As Boolean)
- Try
- If disposing AndAlso components IsNot Nothing Then
- components.Dispose()
- End If
- Finally
- MyBase.Dispose(disposing)
- End Try
- End Sub
- Private components As System.ComponentModel.IContainer
- <System.Diagnostics.DebuggerStepThrough()>
- Private Sub InitializeComponent()
- Me.components = New System.ComponentModel.Container()
- Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
- Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
- Me.dgvBinance = New System.Windows.Forms.DataGridView()
- Me.cmsDgv = New System.Windows.Forms.ContextMenuStrip(Me.components)
- Me.CopyCurrentRowToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.CopySelectedRowsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.CopySelectedCellsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.PasteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.PasteSpecialToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.ExcelGridToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.ExcelRangeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.BinanceWebCopyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- Me.PasteWithHeadersToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
- CType(Me.dgvBinance, System.ComponentModel.ISupportInitialize).BeginInit()
- Me.cmsDgv.SuspendLayout()
- Me.SuspendLayout()
- '
- 'dgvBinance
- '
- Me.dgvBinance.AllowUserToAddRows = False
- Me.dgvBinance.AllowUserToDeleteRows = False
- Me.dgvBinance.AllowUserToResizeRows = False
- Me.dgvBinance.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells
- Me.dgvBinance.BackgroundColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.dgvBinance.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText
- Me.dgvBinance.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None
- DataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
- DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- DataGridViewCellStyle1.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- DataGridViewCellStyle1.ForeColor = System.Drawing.Color.DarkGray
- DataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
- DataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.White
- DataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
- Me.dgvBinance.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle1
- Me.dgvBinance.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
- Me.dgvBinance.ContextMenuStrip = Me.cmsDgv
- DataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
- DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- DataGridViewCellStyle2.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- DataGridViewCellStyle2.ForeColor = System.Drawing.Color.White
- DataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight
- DataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText
- DataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
- Me.dgvBinance.DefaultCellStyle = DataGridViewCellStyle2
- Me.dgvBinance.EnableHeadersVisualStyles = False
- Me.dgvBinance.GridColor = System.Drawing.Color.FromArgb(CType(CType(42, Byte), Integer), CType(CType(42, Byte), Integer), CType(CType(42, Byte), Integer))
- Me.dgvBinance.Location = New System.Drawing.Point(12, 25)
- Me.dgvBinance.Name = "dgvBinance"
- Me.dgvBinance.RowHeadersVisible = False
- Me.dgvBinance.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
- Me.dgvBinance.RowTemplate.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.dgvBinance.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.White
- Me.dgvBinance.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
- Me.dgvBinance.Size = New System.Drawing.Size(689, 266)
- Me.dgvBinance.TabIndex = 2
- '
- 'cmsDgv
- '
- Me.cmsDgv.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.CopyCurrentRowToolStripMenuItem, Me.CopySelectedRowsToolStripMenuItem, Me.CopySelectedCellsToolStripMenuItem, Me.PasteToolStripMenuItem, Me.PasteSpecialToolStripMenuItem, Me.PasteWithHeadersToolStripMenuItem})
- Me.cmsDgv.Name = "cmsDgv"
- Me.cmsDgv.Size = New System.Drawing.Size(181, 136)
- '
- 'CopyCurrentRowToolStripMenuItem
- '
- Me.CopyCurrentRowToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.CopyCurrentRowToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.CopyCurrentRowToolStripMenuItem.Name = "CopyCurrentRowToolStripMenuItem"
- Me.CopyCurrentRowToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
- Me.CopyCurrentRowToolStripMenuItem.Text = "Copy Current Row"
- '
- 'CopySelectedRowsToolStripMenuItem
- '
- Me.CopySelectedRowsToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.CopySelectedRowsToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.CopySelectedRowsToolStripMenuItem.Name = "CopySelectedRowsToolStripMenuItem"
- Me.CopySelectedRowsToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
- Me.CopySelectedRowsToolStripMenuItem.Text = "Copy Selected Rows"
- '
- 'CopySelectedCellsToolStripMenuItem
- '
- Me.CopySelectedCellsToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.CopySelectedCellsToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.CopySelectedCellsToolStripMenuItem.Name = "CopySelectedCellsToolStripMenuItem"
- Me.CopySelectedCellsToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
- Me.CopySelectedCellsToolStripMenuItem.Text = "Copy Selected Cells"
- '
- 'PasteToolStripMenuItem
- '
- Me.PasteToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.PasteToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.PasteToolStripMenuItem.Name = "PasteToolStripMenuItem"
- Me.PasteToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
- Me.PasteToolStripMenuItem.Text = "Paste"
- '
- 'PasteSpecialToolStripMenuItem
- '
- Me.PasteSpecialToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.PasteSpecialToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ExcelGridToolStripMenuItem, Me.ExcelRangeToolStripMenuItem, Me.BinanceWebCopyToolStripMenuItem})
- Me.PasteSpecialToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.PasteSpecialToolStripMenuItem.Name = "PasteSpecialToolStripMenuItem"
- Me.PasteSpecialToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
- Me.PasteSpecialToolStripMenuItem.Text = "Paste Special..."
- '
- 'ExcelGridToolStripMenuItem
- '
- Me.ExcelGridToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.ExcelGridToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.ExcelGridToolStripMenuItem.Name = "ExcelGridToolStripMenuItem"
- Me.ExcelGridToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
- Me.ExcelGridToolStripMenuItem.Text = "Excel Grid"
- '
- 'ExcelRangeToolStripMenuItem
- '
- Me.ExcelRangeToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.ExcelRangeToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.ExcelRangeToolStripMenuItem.Name = "ExcelRangeToolStripMenuItem"
- Me.ExcelRangeToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
- Me.ExcelRangeToolStripMenuItem.Text = "Excel Range"
- '
- 'BinanceWebCopyToolStripMenuItem
- '
- Me.BinanceWebCopyToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.BinanceWebCopyToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.BinanceWebCopyToolStripMenuItem.Name = "BinanceWebCopyToolStripMenuItem"
- Me.BinanceWebCopyToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
- Me.BinanceWebCopyToolStripMenuItem.Text = "Binance Web Copy"
- '
- 'PasteWithHeadersToolStripMenuItem
- '
- Me.PasteWithHeadersToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.PasteWithHeadersToolStripMenuItem.ForeColor = System.Drawing.Color.White
- Me.PasteWithHeadersToolStripMenuItem.Name = "PasteWithHeadersToolStripMenuItem"
- Me.PasteWithHeadersToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
- Me.PasteWithHeadersToolStripMenuItem.Text = "Paste Auto Headers"
- '
- 'frmJsonToDatatTable
- '
- Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!)
- Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
- Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
- Me.ClientSize = New System.Drawing.Size(713, 354)
- Me.Controls.Add(Me.dgvBinance)
- Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
- Me.ForeColor = System.Drawing.Color.White
- Me.Name = "frmJsonToDatatTable"
- Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
- Me.Text = "frmJsonToDatatTable"
- CType(Me.dgvBinance, System.ComponentModel.ISupportInitialize).EndInit()
- Me.cmsDgv.ResumeLayout(False)
- Me.ResumeLayout(False)
- End Sub
- Friend WithEvents dgvBinance As DataGridView
- Friend WithEvents cmsDgv As ContextMenuStrip
- Friend WithEvents CopyCurrentRowToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents CopySelectedRowsToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents CopySelectedCellsToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents PasteToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents PasteSpecialToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents ExcelGridToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents ExcelRangeToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents BinanceWebCopyToolStripMenuItem As ToolStripMenuItem
- Friend WithEvents PasteWithHeadersToolStripMenuItem As ToolStripMenuItem
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement