datasetの内容をxmlに出力するのにはたった一行、writexmlという関数を使うだけでできあがる模様。あいたたた。datagridにバインドされたデータを一生懸命xml化するためにコードを考えていたのが馬鹿らしくなった。datasetの内容をxmlに変換できるというのは知らないとわからないけれど、xmlデータをdatagridにバインドできるのを知ってたのに逆を想像できなかったのが鈍すぎる。
datasetをxmlファイルに出力するサンプルコード(スマートな方法)
'datasetを作成するための素材 Dim cn As New OleDb.OleDbConnection("データベース接続文字列") Dim da As OleDb.OleDbDataAdapter Dim ds As DataSet 'datasetにsqlの結果のテーブルをセット ds = New DataSet("家計簿") da = New OleDb.OleDbDataAdapter("SELECT * FROM 収支", cn) da.Fill(ds, "家計簿") 'datasetにセットされたテーブルをxmlファイル出力 ds.WriteXml("./data/account.xml") 'datasetの解放 da.Dispose() ds.Dispose()
datasetをxmlファイルに出力するサンプルコード(悪い見本)
'datasetを作成するための素材 Dim cn As New OleDb.OleDbConnection("データベース接続文字列") Dim da As OleDb.OleDbDataAdapter Dim ds As DataSet ds = New DataSet("家計簿") da = New OleDb.OleDbDataAdapter(SELECT * FROM 収支, cn) da.Fill(ds, "家計簿") 'xmlドキュメントの宣言 Dim xmlDoc As New System.Xml.XmlDocument 'XML宣言 Dim xmlDecl As System.Xml.XmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", Nothing) '宣言を子要素として追加 xmlDoc.AppendChild(xmlDecl) 'ルート要素の作成 Dim rootEle As System.Xml.XmlElement = xmlDoc.CreateElement("家計簿データ") 'データグリッドのレコード件数をセット Dim records As Integer Dim i As Integer records = ds.Tables(0).Rows.Count i = ds.Tables(0).Rows.Count '家計簿のレコードの各要素の宣言 Dim recordElements(i) As XmlElement Dim idEle(i) As XmlElement Dim dateEle(i) As XmlElement Dim catEle(i) As XmlElement Dim detEle(i) As XmlElement Dim accEle(i) As XmlElement Dim moneyEle(i) As XmlElement Dim comEle(i) As XmlElement 'datasetのテーブルからレコードの各値を取り出してノードを作成。レコード件数分ループ。 For i = 0 To (records - 1) recordElements(i) = xmlDoc.CreateElement("レコード") dateEle(i) = xmlDoc.CreateElement("入力日") dateEle(i).InnerText = ds.Tables(0).Rows(i).Item(0).ToString catEle(i) = xmlDoc.CreateElement("費目") catEle(i).InnerText = ds.Tables(0).Rows(i).Item(1).ToString detEle(i) = xmlDoc.CreateElement("内訳") detEle(i).InnerText = ds.Tables(0).Rows(i).Item(2).ToString accEle(i) = xmlDoc.CreateElement("口座名称") accEle(i).InnerText = ds.Tables(0).Rows(i).Item(3).ToString moneyEle(i) = xmlDoc.CreateElement("収支") moneyEle(i).InnerText = ds.Tables(0).Rows(i).Item(4).ToString comEle(i) = xmlDoc.CreateElement("備考") comEle(i).InnerText = ds.Tables(0).Rows(i).Item(5).ToString idEle(i) = xmlDoc.CreateElement("id") idEle(i).InnerText = ds.Tables(0).Rows(i).Item(6).ToString recordElements(i).AppendChild(dateEle(i)) recordElements(i).AppendChild(catEle(i)) recordElements(i).AppendChild(detEle(i)) recordElements(i).AppendChild(accEle(i)) recordElements(i).AppendChild(moneyEle(i)) recordElements(i).AppendChild(comEle(i)) recordElements(i).AppendChild(idEle(i)) rootEle.AppendChild(recordElements(i)) Next i '作成したルート要素をxmlDocの子要素として追加 xmlDoc.AppendChild(rootEle) '作成したDOMドキュメントをファイルに保存 xmlDoc.Save("./data/account.xml") 'datasetの解放 da.Dispose() ds.Dispose()
・・・こんなしんどいことをやろうとしてました(;´д` )