Miten datagridviewiä käytetään? Miten siihen saa ladattua tietoa ja miten luettua?
Onko jotain toista, helpompaa tapaa esittää tietoa lomakkeella taulukkomuodossa?
Moikka novice!
tässä hieman osviittaa alkuunpääsemiseksi...
Esim1:
oletetaan, että projektissa on formi (Main) jossa on DataGridView kontrolli...
Imports System
Imports System.Drawing
Imports System.Data
Imports System.Windows.Forms
' ...
' Visual Basic-editorin valmiiksi generoimaa...
' ...
Private Sub MainForm_Load(sender As Object, e As EventArgs)
'määritellään DataSet-objekti (uusi instanssi)...
Dim datasetti As DataSet = New DataSet()
' määritellään taulu-objekti ja
' lisätään se DataSet-objektin tauluksi...
Dim taulu As DataTable = datasetti.Tables.Add("Taulu1")
Dim i As Integer = 0
Dim j As Integer = 0
For i = 1 to 3
' määritellään sarake-objekti
' (uusi instanssi laskurisilmukan jokaisella kierroksella)...
Dim sarake As DataColumn = New DataColumn()
' märitellään ehtorakennelmassa sarakkeen datatyyppi...
Select Case i
Case 1
sarake.DataType = Type.GetType("System.Int32")
Case 2
sarake.DataType = Type.GetType("System.String")
Case 3
sarake.DataType = Type.GetType("System.String")
End Select
' nimetään sarake
sarake.ColumnName = "sarake" + i.ToString
' lisätään sarake tauluun...
taulu.Columns.Add(sarake)
Next i
' määritellään ensimmäinen sarake (Columns(0))
' taulun perusavaimeksi...
Dim PrimaryKeyColumns(0) As DataColumn
PrimaryKeyColumns(0)= taulu.Columns("sarake1")
taulu.PrimaryKey = PrimaryKeyColumns
' luodaan laskurisilmukassa kymmenen riviä (tietuetta)
For i = 1 To 10
' määritetään rivi-objekti
' (uusi instanssi laskurisilmukan (i) jokaisella kierroksella)...
Dim rivi As DataRow = taulu.NewRow()
' käydään sisemmässä laskurisilmukassa sarakkeet läpi...
For j = 1 To 3
' ja annetaan ehtolauserakennelmassa sarakkeille arvot...
Select Case j
Case 1
rivi("sarake" + j.ToString) = i
Case 2
rivi("sarake" + j.ToString) = _
"sarake" + j.ToString + ":n tieto"
Case 3
rivi("sarake" + j.ToString) = _
"sarake" + j.ToString + ":n tieto"
End Select
Next j
lisätään rivi tauluun...
taulu.Rows.Add(rivi)
Next i
' määritetään DataGridView-kontrollin tietolähde...
DataGRidView1.DataSource = datasetti.Tables("Taulu1")
End SubEsim2:
oletetaan, että projektissa on formi (Main) jossa on DataGridView kontrolli... ja C:-aseman juuressa on Access-tietokanta nimeltään Tietokanta.mdb, jossa on taulu nimeltään Taulu1, jossa on tietueita...
Imports System
Imports System.Drawing
Imports System.Data
Imports System.Data.OleDb
Imports System.Windows.Forms
' ...
' Visual Basic-editorin valmiiksi generoimaa...
' ...
Private Sub MainForm_Load(sender As System.Object, e As System.EventArgs)
' määritellään yhteysmerkkijono...
Dim connectionstring As String = _
"Provider=Microsoft.Jet.OLEDB.4.0; " _
+ "Ole DB Services=-4; Data Source=C:\Tietokanta.mdb"
' määritellään yhteystyyppi-objekti (uusi instanssi)...
Dim connection As OleDbConnection = _
New OleDb.OleDbConnection(connectionstring)
' Testataan tietokantayhteyttä...
Try
' yritetään luoda yhtes tietokantaan...
connection.Open
Catch ex As Exeption
' jos yhteyttä tietokantaan ei synny niin
' ilmoitetaan asiasta viesti-ikkunassa...
MessageBox.Show(ex.ToString)
End Try
' jos yhteys tietokantaan on OK. niin...
If connectionstate.Open Then
' määritellään DataSet-objekti (uusi instanssi)...
Dim ds As DataSet = New DataSet
' määritellä SQL-kysely merkkijono...
Dim querystring As String = "SELECT * FROM [Taulu1]"
' määritellä datasovitin-objekti (uusi instanssi)
Dim da As OleDb.OleDbDataAdapter = _
New OleDbDataAdapter(querystring, connection)
' luodaan DataSet-objektiin taulu ja täytetään
' luotu taulu datasovittimen avulla haetuilla,
' SQL-kyselyn/yhteystyypin määritämän, tietokannan
' taulun tiedoilla...
da.Fill(ds, "Taulu1")
' tuhotaan datasovitin-objektista luotu instanssi...
da = Nothing
' suljetaan yhteys tietokantaan...
connection.Close
' tuhotaan yhteystyyppi-objektista luotu instanssi...
connection = Nothing
' tuhotaan merkkijonomuuttuja-objektit...
connectionstring = Nothing: querysring = Nothing
' määritetään DataGridView-kontrollin tietolähde...
DataGridView1.DataSource = ds.Tables("Taulu1")
End If
End SubYhteenveto:
DataSet/DataGridView yhdistelmää vaivattomampaa tapaa luoda/tuoda/esittää/muokata/viedä "taulukko-dataa" ei ole vielä tullut vastaan...
Öööö...kiitos vastauksesta, mutta kyllä siinä taitaa olla minulle liikaa uutta asiaa.
Jatkan harjoittelua ja palaan asiaan myöhemmin.
Löysin muuten netistä erittäin hyvän ohjelmoinnin opetus sivuston : http://www.homeandlearn.co.uk/index.html
Tätä kannattaa ehkä mainostaa aloittelijoille, ellei sitten jo ole linkkiä jossain täällä.
Heippa taas!
No ei se mitään, kiinnostuksestahan tämä kaikki riippuu...mutta niille, joille DataSet ja DataGridView-kontrollin käsittely on jo ehkä hieman tutumpaa...
Esim3:
oletetaan että olemassaolevan Office version mukainen PIAs-paketti (Primary Interop Assemblies) on asennettu...ja C:-aseman juuressa on Excel-työkirja nimeltä Työkirja1, jonka taulussa Taul1 on tietoa ja lomakkeella on ohjaus-objektit DataGridView1 sekä Button1...
Imports System
Imports System.Data
Imports System.Diagnostics
Imports System.Drawing
Imports System.Windows.Forms
Imports Excel = Microsoft.Office.Interop.Excel
'...
' Visual Basic-editorin valmiiksi generoimaa...
'...
Sub Button1_Click(sender As Object, e As EventArgs)
Dim kokoPolku As String = "C:\Työkirja1.xls"
Dim xlApp As Excel.Application = _
CType(CreateObject("Excel.Application"), Excel.Application)
Dim xlBook As Excel.Workbook = _
CType(xlApp.Workbooks.Add(kokoPolku), Excel.Workbook)
Dim xlSheet As Excel.WorkSheet = _
CType(xlBook.Worksheets(1), Excel.Worksheet)
xlSheet.Application.Visible = False
If xlSheet Is Nothing Then
kokoPolku = Nothing
xlApp = Nothing: xlBook = Nothing
xlSheet = Nothing: Tapa_Prosessi: Me.Close
Else
Dim sarakkeet As Integer = _
xlSheet.Cells.SpecialCells( _
Excel.XlCellType.xlCellTypeLastCell).Column
Dim rivit As Integer = _
xlSheet.Cells.SpecialCells( _
Excel.XlCellType.xlCellTypeLastCell).Row
Dim xlDataSetti As DataSet = New DataSet()
Dim xlTaulu As DataTable = xlDataSetti.Tables.Add(xlSheet.Name)
Dim i As Integer = 0: Dim j As Integer = 0
For i = 1 To sarakkeet
Dim xlSarake As DataColumn = New DataColumn()
xlSarake.DataType = Type.GetType("System.Object")
Dim sarake() As String = _
xlSheet.Cells(1, i).Address.Split("$")
xlSarake.ColumnName = sarake(1)
xlTaulu.Columns.Add(xlSarake)
sarake = Nothing
xlSarake = Nothing
Next i
For i = 1 To rivit
Dim rivi As DataRow = xlTaulu.NewRow()
For j = 1 To sarakkeet
rivi(j - 1) = xlSheet.Cells(i, j).Value
Next j
xlTaulu.Rows.Add(rivi)
rivi = Nothing
Next i: i = Nothing: j = Nothing
DataGRidView1.DataSource = xlDataSetti.Tables(xlSheet.Name)
rivit = Nothing: sarakkeet = Nothing
xlSheet = Nothing: xlBook = Nothing
xlApp = Nothing: kokoPolku = Nothing
Tapa_Prosessi()
End If
End Sub
Sub Tapa_Prosessi()
Dim xlProsessi As Process() = _
Process.GetProcessesByName("Excel")
If Not xlProsessi Is Nothing Then
Dim i As Integer = 0
For i = xlProsessi.GetLowerBound(0) _
To xlProsessi.GetUpperBound(0)
Try
xlProsessi(i).Kill()
Catch ex As Exception
End try
Next i: i = Nothing
End If
xlProsessi = Nothing
End Sub
Sub MainForm_FormClosing(sender As Object, e As FormClosingEventArgs)
Me.Dispose
End Sub
Sub MainForm_FormClosed(sender As Object, e As FormClosedEventArgs)
End
End SubHeippa taas!
Edellinen esimerki valotti mahdollisuuksia DataSet-objektin "rakentamiseksi" sekä tiedon tuontia em. objektiin...Järkevin tapa tiedon siirtoon Excelistä ja takaisin on tietenkin taaskin käyttää hyväksi Microsoftin Jet-masiinaa ja OleDbDataAdapter'ia...
Esim4:
Sub Button2Click(sender As Object, e As EventArgs)
If Dir("C:\net.xls") <> "" Then
Dim xlDataSetti As New DataSet
Dim yhteysmerkkijono As String = _
"Provider=Microsoft.Jet.OLEDB.4.0;" + _
"Data Source= "C:\net.xls; " + _
"Extended Properties=""Excel 8.0;"""
Dim xlDataAdapteri As New OleDb.OleDbDataAdapter( _
"SELECT * FROM [Taul1$]", yhteysmerkkijono)
xlDataAdapteri.Fill(xlDataSetti, "Taul1")
DataGridView1.DataSource = xlDataSetti.Tables("Taul1")
Else
MessageBox.Show("Tiedostoa C:\net.xls ei löydy")
End If
End SubHeippa taas!
tässä vielä DataSet/DataGridView sarjaan "tavalliseen" tekstitiedostoon tallennetun tiedon tuonti DataSet-objektiin ja edelleen DataGridView-ohjausobjektiin...oletetaan, että C:-aseman juuressa on tekstitiedosto nimeltä data.txt, jonka sisältö näyttää...
data.txt:
tietoa,tietoa,tietoa,tietoa,tietoa tietoa,tietoa,tietoa,tietoa,tietoa tietoa,tietoa,tietoa,tietoa,tietoa
Esim5:
Imports System.Data
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
'....
'....
Sub Button1_Click(sender As Object, e As EventArgs)
Dim tiedosto As String = "data.txt"
Dim kokoPolku As String = "C:\" + tiedosto
If Dir(kokoPolku) = "" Then
tiedosto = Nothing
kokoPolku = Nothing
Exit Sub
End If
Filesystem.FileOpen(1, kokoPolku, _
OpenMode.Input, OpenAccess.Read)
kokoPolku = Nothing
Dim FileStrArray() As String = _
FileSystem.InputString(1,LOF(1)). _
Split(Environment.NewLine)
FileSystem.FileClose(1)
Dim datasetti As New DataSet
Dim taulu As DataTable = _
datasetti.Tables.Add(tiedosto.Replace(".", "_"))
Dim i As Integer = 0
Dim sarakkeet As Integer = _
FileStrArray(FileStrArray.GetLowerBound(0)) _
.Split(",").Length - 1
For i = 0 To sarakkeet
Dim sarake As New DataColumn()
sarake.DataType = Type.GetType("System.String")
sarake.ColumnName = "sarake(" + i.ToString + ")"
taulu.Columns.Add(sarake)
sarake = Nothing
Next i: sarakkeet = Nothing
For i = FileStrArray.GetLowerBound(0) _
To FileStrArray.GetUpperBound(0)
Dim rivi As DataRow = taulu.NewRow()
Dim j As Integer = 0
Dim tieto() As String = _
FileStrArray(i).Split(",")
For j = tieto.GetLowerBound(0) _
To tieto.GetUpperBound(0)
rivi(j) = tieto(j).Replace(Chr(10), "")
Next j: j = Nothing
taulu.Rows.Add(rivi)
tieto = Nothing: rivi = Nothing
Next i: i = Nothing
FileStrArray = Nothing
DataGridView1.DataSource = _
datasetti.Tables(tiedosto.Replace(".", "_"))
tiedosto = Nothing
End SubHeippa taas!
Lopuksi DataSet/DataGridView sarjan yhteenveto tarkastelunäkökulmana tiedon luonti,
editointi ja vienti tekstitiedostoon sekä tuonti tekstitiedostosta...
Esim 6:
Imports System
Imports System.Data
Imports System.Windows.Forms
Imports Microsoft.VisualBasic
'...
'* * * * * * * * * * * * * * * * * * * * * * * * * * *
'* Lomakkeelle: *
'* 1 DataGridView-ohjausobjekti *
'* 3 Button-ohjausobjektia (Button1 Enabled=False) *
'* 1 NumericUpDown-ohjausobjekti *
'* *
'* * * * * * * * * * * * * * * * * * * * * * * * * * *
Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs)
If NumericUpDown1.Value > 0 Then
Button1.Enabled = True
Else
Button1.Enabled = False
End If
End Sub
Sub Button1_Click(sender As Object, e As EventArgs)
If NumericUpDown1.Value > 0 Then
Dim datasetti As New DataSet
Dim taulu As DataTable = datasetti.Tables.Add("taulu1")
Dim i As Integer
For i = 1 to NumericUpDown1.Value
Dim sarake As New DataColumn()
sarake.DataType = Type.GetType("System.String")
sarake.ColumnName = "sarake(" + (i - 1).ToString +")"
taulu.Columns.Add(sarake)
sarake = Nothing
Next i
Dim rivi As DataRow = taulu.NewRow()
For i = 0 To datasetti.Tables("taulu1").Columns.Count -1
rivi(i) = ""
Next i: i = Nothing
taulu.Rows.Add(rivi)
rivi = Nothing
NumericUpDown1.Value = 0
DataGridView1.DataSource = _
datasetti.Tables("taulu1")
End If
End Sub
Sub Button2_Click(sender As Object, e As EventArgs)
KirjoitaTiedostoon
End Sub
Sub Button3_Click(sender As Object, e As EventArgs)
LueTiedostosta
End Sub
Sub KirjoitaTiedostoon()
If DataGridView1.RowCount > 0 Then
DataGridView1.AllowUserToAddRows = False
Dim kokoPolku As String = "C:\data.txt"
FileSystem.FileOpen(1, kokoPolku, _
OpenMode.Output, OpenAccess.Write)
Dim i As Integer = 0
Dim j As Integer = 0
DataGridView1.ClearSelection
For i = 0 To DataGridView1.RowCount - 1
DataGridView1.Rows(i).Selected = True
Dim StrToFile As String = ""
For j = 0 To DataGridView1.ColumnCount - 1
StrToFile += DataGridView1.SelectedCells.Item(j).Value
If j < DataGridView1.ColumnCount - 1 Then
StrToFile += ","
End If
Next j: j -= j
If i < DataGridView1.RowCount - 1 Then
StrToFile += Environment.NewLine
End If
FileSystem.Print(1, StrToFile)
StrToFile = Nothing
DataGridView1.Rows(i).Selected = False
Next i
FileSystem.FileClose(1)
DataGridView1.AllowUserToAddRows = True
End If
End Sub
Sub LueTiedostosta()
Dim tiedosto As String = "data.txt"
Dim kokoPolku As String = "C:\" + tiedosto
If Dir(kokoPolku) = "" Then
MessageBox.Show("Tiedostoa " + kokoPolku + " ei löydy!")
tiedosto = Nothing
kokoPolku = Nothing
Exit Sub
End If
Filesystem.FileOpen(1, kokoPolku , _
OpenMode.Input, OpenAccess.Read)
kokoPolku = Nothing
Dim FileStrArray() As String = _
FileSystem.InputString(1,LOF(1)). _
Split(Environment.NewLine)
FileSystem.FileClose(1)
Dim datasetti As New DataSet
Dim taulu As DataTable = _
datasetti.Tables.Add(tiedosto.Replace(".", "_"))
Dim i As Integer = 0
Dim sarakkeet As Integer = _
FileStrArray(FileStrArray.GetLowerBound(0)) _
.Split(",").Length - 1
For i = 0 To sarakkeet
Dim sarake As New DataColumn()
sarake.DataType = Type.GetType("System.String")
sarake.ColumnName = "sarake(" + i.ToString +")"
taulu.Columns.Add(sarake)
sarake = Nothing
Next i: sarakkeet = Nothing
For i = FileStrArray.GetLowerBound(0) _
To FileStrArray.GetUpperBound(0)
Dim rivi As DataRow = taulu.NewRow()
Dim j As Integer = 0
Dim tieto() As String = _
FileStrArray(i).Split(",")
For j = tieto.GetLowerBound(0) _
To tieto.GetUpperBound(0)
rivi(j) = tieto(j).Replace(Chr(10), "")
Next j: j = Nothing
taulu.Rows.Add(rivi)
tieto = Nothing: rivi = Nothing
Next i: i = Nothing
FileStrArray = Nothing
DataGridView1.DataSource = _
datasetti.Tables(tiedosto.Replace(".", "_"))
tiedosto = Nothing
End SubKiitoksia esimerkeistä Nea, ehkäpä saan näistä jotain aikaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.