1

データベースをxmlファイルとして含むアプリケーションがあります。クライアントサーバーアーキテクチャを備えています。したがって、サーバーはデータセットを使用して xml ファイルからデータを読み取り、xml スキーマに格納します。次に、サーバーはデータをシリアル化し、UI (クライアント) に渡します。したがって、UI データは、左側に Treeview、右上に listview、右下に propertygrid を使用して表示されます。

Ui のデータは、クラスとオブジェクトに分類されます。これで、データベースに xml ファイル machinesclass.xml と machineobjects.xml ができました。machineclass.xml には、電子クラス、コンピューター クラス、agriculturetool クラスなどのさまざまなクラスが含まれ、machineobjects.xml には TV、pentium4 コンピューター、Tractror などが含まれます。したがって、UI でツリービューから電子ノードを選択すると、TV、ラジオ、電話などが一覧表示されます。リストビューを使用して右上に含まれるオブジェクトと、オブジェクト「TV」を選択すると、テレビの関連プロパティが右下のプロパティグリッドに表示されます。

これで、誰かが UI から選択したオブジェクトを xml ファイル (.xml)、親の machinesclass.xml および machineobjects.xml からバックアップしたい場合にタスクができました。

たとえば、誰かが UI リストビューから TV を選択し、.xml ファイル (tv.xml) の観点からバックアップして、しばらくしてからデータをインポートできるようにしたい場合、ここでどのようなロジックを実装できますか? listview と propertygrid をシリアル化できますか、それを行うオプションはありますか? これは、UI 内でのコピー ペースト操作に使用しているコードの一部です。

4

1 に答える 1

1

listview と propertygrid をシリアル化できますか、それを行うオプションはありますか?

ListView をシリアル化する方法は次のとおりです:
http://www.codeproject.com/Articles/3335/Persist-ListView-settings-with-serialization

PropertyGrid をシリアル化する方法は次のとおりです:
http://www.codeproject.com/Articles/27326/Load-and-Save-Data-Using-PropertyGrid

私のアドバイスは、適切に行うことです。正しい解決策は、ListView と PropertyGrid もバインドされているビジネス オブジェクトをシリアル化することだと思います。ビジネス ロジックを GUI から分離すると、非常に簡単になります。

編集(OPが質問を編集してコードを表示した後):

データを XML ファイルに保存するには:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter BinFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
System.IO.FileStream FS = new System.IO.FileStream("C:\\tv.xml", IO.FileMode.Create);
BinFormatter.Serialize(FS, new ArrayList(listview1.Items));
FS.Close();

XML ファイルからデータを読み込むには:

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter BinFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
string fname;
System.IO.FileStream FS = new System.IO.FileStream("C:\\tv.xml", IO.FileMode.Open);
listview1.Items.AddRange(BinFormatter.Deserialize(FS).ToArray(typeof(ListViewItem)));
FS.Close();

PropertyGridでそれを行う方法は次のとおりです。

于 2012-04-12T02:51:08.330 に答える