- - PR -
XMLファイルを読み込んだDataGridにおける「列」の型変換
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-14 00:50
ReadXml()でデータを読む前にDataSetの列定義をしておけば各列の型を設定できます。
もしくは、スキーマを定義したXMLファイルをReadXmlSchema()でDataSetに読み込むこともできます。 スキーマファイルはこの場合ではこんな感じになります。 なおこ(・∀・)さんの作られたXMLを参考に作りました。
これはDataSetのWriteXmlSchema()メソッドで生成したものです。 手で書いたわけではありません(笑 DataSet.ReadXmlSchema メソッド http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemDataDataSetClassReadXmlSchemaTopic.asp DataSet.WriteXmlSchema メソッド http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemDataDataSetClassWriteXmlSchemaTopic.asp | ||||
|
投稿日時: 2005-09-14 11:35
aacuteさん、アドバイス有難う御座います
C#ではオブジェクト等のシリアル化、デシリアル化にXMLを用いることができるくらいだか ら、XMLの要素(string型)くらい簡単に変換してくれると思っていたしだいです。 これを機にXMLを勉強してみようと思います。 | ||||
|
投稿日時: 2005-09-14 21:00
むむむ??? 型の変換を簡単にやったらいかんでしょ。っていうか、簡単じゃないです。 VB で簡単にできるのは、変換できる型がある程度決まっていますし、だいたい、何を何に変えてよいのかわからないのに、勝手に変えてしまわれると、その方が困ります。 _________________ | ||||
|
投稿日時: 2005-09-14 22:58
.NET 2.0ではXmlReadMode.InferTypedSchemaというオプションがあるので、まあ簡単に変換してくれると言って良いと思います。
実際、.NET(少なくとも1.x)のDataSet.InferXmlSchema()では、XML文書をXmlDocumentで読み込んで、ツリーのノード全部を辿って、ColumnMappingを、MappingType.SimpleContentであるか、MappingType.Elementであるか、といった推論を行っています。というか、そうしないと、リレーショナルな構造などが正しく推論できないんですね。 で、強い型付けの推論は、SimpleContentな要素であると判断しているノードに対応するDataColumnについて行えば良く、もし途中でSimpleContentではないということになれば、単純に推論を破棄するだけです。.NET 2.0のXmlSchemaInferenceを自分で実装していて感じたことですが(このXmlSchemaInference.csの中のInferSimpleType ()とInferMergedType ()という関数で実装しています)、文字列から型を推論する作業は、リレーショナル構造を推論する作業に比べれば、だいぶ簡単ですよ。 追記: InferXmlSchema()(少なくともそれと同等の機能)は、dataset構造が未定義でXmlReadModeがAutoの場合、ReadXml()の中から呼び出されます。 [ メッセージ編集済み 編集者: Atsushi.Eno 編集日時 2005-09-14 23:01 ] |