none
C#2010で、1列のみからなる行列を扱う場合、どのような構成がオススメでしょうか。 RRS feed

  • 質問

  • 現在は、datagridviewをフォームに貼りつけ、datasetをバインドしています。

    それで、フォーム上で1列のみからなる行列をF2で編集したりDeleteしたりしています。

    そして、編集後の行列をXML出力し、次回アプリを軌道したときにそのXMLファイルを読み込むことで、

    前回のアプリ終了時点での状態を復元するようにしています。

    この場合、わざわざdatasetなるものを使わなくてもいいようなきがしてきました。

    普通の1次元配列 (型はstringです。)を用意して、この1次元配列arrayを直接、datagridviewにバインドさせて

    あげればいいだけのようなきがしてきました。

     

    そこで、あえてdatasetというのを利用するメリットはなんですか?

    2011年4月8日 6:57

回答

  • エラーの有無や、編集中の状態や、変更の有無や、変更の取り消しなどといった機能と、簡単にXMLに吐き出せるくらいでしょうか?

    それらの機能がいらなければstring[]でもかまわないと思います。


    かずき Blog:http://d.hatena.ne.jp/okazuki/ VS 2010のデザイナでBlendのBehaviorをサポートするツール公開してます。 http://vsbehaviorsupport.codeplex.com/
    • 回答としてマーク bianoide 2011年4月11日 0:59
    2011年4月8日 11:53
  • そこで、あえてdatasetというのを利用するメリットはなんですか?

    DataSetやDataTableに関して書きだすと長文になるほどのボリュームがあるのですが、端的に言えば、DataSetやDataTableはデーターベースと非接続型でやり取りを行うことが主目的でしょう。よって、そのために最適化されていると思います。逆に言えば、このようなケースでない今回のXMLファイルの読み書きであれば、DataSetもしくはDataTableを必ずしも使う必要はないと思います。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク bianoide 2011年4月11日 3:27
    2011年4月8日 14:24
    モデレータ

すべての返信

  • エラーの有無や、編集中の状態や、変更の有無や、変更の取り消しなどといった機能と、簡単にXMLに吐き出せるくらいでしょうか?

    それらの機能がいらなければstring[]でもかまわないと思います。


    かずき Blog:http://d.hatena.ne.jp/okazuki/ VS 2010のデザイナでBlendのBehaviorをサポートするツール公開してます。 http://vsbehaviorsupport.codeplex.com/
    • 回答としてマーク bianoide 2011年4月11日 0:59
    2011年4月8日 11:53
  • そこで、あえてdatasetというのを利用するメリットはなんですか?

    DataSetやDataTableに関して書きだすと長文になるほどのボリュームがあるのですが、端的に言えば、DataSetやDataTableはデーターベースと非接続型でやり取りを行うことが主目的でしょう。よって、そのために最適化されていると思います。逆に言えば、このようなケースでない今回のXMLファイルの読み書きであれば、DataSetもしくはDataTableを必ずしも使う必要はないと思います。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク bianoide 2011年4月11日 3:27
    2011年4月8日 14:24
    モデレータ
  • 返信ありがとうございます。

    もしXML入出力をせず、例えばオリジナルのフォーマットで状態保存しようとすると時間もかかりますし、
    オリジナルのフォーマットで保存する意味も特にありませんので、
    Datasetを継続して利用することにしました。 

    2011年4月11日 0:57
  • 返信ありがとうございます。

    昨年応用技術者を取りましたが、結局わたしはデータベースとかよくわからず、
    わたしのソフトは所詮1次元配列ですので、と思いましたが、
    状態保存の簡易さ(XML入出力が利用できること)を重視し、継続してDatasetを使うことにしました。

    ところで、ヤフー知恵袋みたいに、「解決済み」とかにしたいのですが、
    特にしなくてもいいのですか?

    初めてなのでよく勝手がわかりません。 

    2011年4月11日 0:59
  • ところで、ヤフー知恵袋みたいに、「解決済み」とかにしたいのですが、
    特にしなくてもいいのですか?

    既にされているように「回答としてマーク」を付ければそれだけでOKです。このマークがあることが、「解決済み」にほぼ相当します。「回答としてマーク」は複数付けられます。後から検索してMSDNフォーラムの掲示板に辿り着いた人にとって、この「回答としてマーク」の付いている書き込みに注目することにより、解決策に素早くアクセスできるようになり、解決策の容易な把握にもつながります。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年4月11日 1:50
    モデレータ
  • アドバイスありがとうございます。
    なるほど~回答としてマークということですね。

    2011年4月11日 3:28
  • 少しフォローしておくと、XML での入出力のためだけに DataSet を利用するのは、すこしオーバースペックですね。

    アプリケーションの状態管理ということですので、そのうち保存したい状態が増えたり複雑化するかもしれません。

    • アプリケーション構成ファイルを使用する
    • XmlSerializer や XML 関連のクラスを使用する

    という解決策のほうがよかったかもしれませんね。(共に、XML で読み書きできます)

    特に、Visual Studio を利用されているのであれば、アプリケーション構成ファイルを使用するとそこそこお手軽だったかな、と。

    2011年4月13日 3:52
  • アドバイスありがとうございます。
    Xmlシリアライザ等を調べてみたらなるほど、これはすごく便利なんですね。XMLするだけであればこれで十分という意味で。
    アプリケーション構成ファイルについても調べてみます。

    少なくともDatasetは確かにオーバースペックですね・・。datatableとかColumnとかいろいろとやること多いですし。もっともオーバースペックだからといって何か問題でも?というのもあるけど、少なくとも美しくはないですよね。 

    2011年4月14日 5:39
  • アドバイスありがとうございます。

    Datasetはやめて、BindingList<CMyClass>を使うことにしました。

    List<BindingList<CMyClass>>のインスタンスを作って、
    複数のBindingListを扱いつつ、Xmlシリアライザで一気に吐き出したり吸い込んだりするようにしました。

    大変おせわになりました。重ねてお礼申し上げます。 

    2011年4月19日 7:19
  • 追記ですが、アプリケーション構成ファイルも導入しました。
    フォームの幅(フォームの幅はユーザが自由に増減できる)を保存復元する、といった用途にですが。

    2011年4月19日 7:20