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 Sub
Esim2:
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 Sub
Yhteenveto:
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 Sub
Heippa 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 Sub
Heippa 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 Sub
Heippa 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 Sub
Kiitoksia esimerkeistä Nea, ehkäpä saan näistä jotain aikaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.