|
■No76550 (vb初心者 さん) に返信 > DataSet(Form1で宣言し、かつxmlファイルを読み込んでいる)を、 > Form2で参照する方法を教えてください。 > (Publicで宣言してみたのですが上手くいきませんでした…)
「何を」Publicにしましたか?
いろいろなやり方がありますが、このような場合は、Form2 側に 「DataSet を受け取るための機能」を用意するのが良いとおもいます。
たとえば、Form1 側から Using f As New Form2( データセットの変数 ) f.ShowDialog(Me) 'モーダル呼び出し End Using あるいは Dim f As New Form2( データセットの変数 ) f.Show(Me) 'モードレス呼び出し のように、Form2 のコンストラクタ引数として渡せるようにするため、 『Form2 側のコンストラクタ』に引数を追加して Public Class Form2 Private ds As DataSet Public Sub New() Me.New(Nothing) End Sub Public Sub New(ByVal ds As DataSet) Me.ds = ds InitializeComponent() End Sub End Class のような実装にしておくとか。
あるいは、Form2 側に「Public Property 何某 As DataSet」のような 『Public なプロパティ』を設けておき、Form1 から、その Form2 のプロパティに対して DataSet をセットしてやるという手もありますね。
> Form2で参照したDataSetを編集し、編集したセルだけxmlファイルに書き込む方法を教えてください。 随分と漠然とした質問ですね…? (^^; 出力する XML は、どのような書式にしたいのでしょうか。
XML のフォーマットにこだわりが無く、かつ、 編集したセルではなく、編集したレコードの情報でも良いのなら、 '編集結果のみを集めた DataSet を取得 Dim changedData As DataSet = ds.GetChanges()
'その DataSet の、データ部分のみを XML ファイルに保存 changedData.WriteXml("C:\TEST\sample.xml")
'「削除された行」や、「更新された行の編集前後の値」まで保持したいなら、こう 'changedData.WriteXml("C:\TEST\sample.xml", XmlWriteMode.DiffGram) などと書けます。
もっと自由なフォーマットにしたいなら、LINQ で処理するのが良いかも。
|