|
C# をお使いなのですし、質問文中でも大文字小文字を 正しく書き分けるようにした方が良いかと思います。 (これが VB の質問なら、大文字小文字の違いにも目を瞑るのですが)
■No87059 (kaz さん) に返信 > | りんご | | > の場合は(価格が空白)、 > <fruits> > <name>りんご</name> > </fruits> > と<price>の項目が消えてしまいます
price フィールドのデータ型は何ですか? また、「空白」の場合にはどのような値がセットされていますか?
■No87061 (kaz さん) に返信 > xml書き込みは、 > DataSet.WriteXml メソッド (String, XmlWriteMode)で > xmlwritemodeをWriteSchemaにして行っています
質問文と内容が微妙に異なっているようですね。
現在のコードは、「DataGridView からの XML 出力」ではなく、 「DataSet からの XML 出力」になってしまっているように見えますが、 それで構わないのでしょうか?
たとえば、DataTable の列の中に「DataGridView にバインドしていない列」があった場合や、 DataGridView の列の中に「データバインドしていない列」が含まれていると、 DataSet.WriteXml の結果は、DataGridView とは合致しませんよね。
> dataGridView1.DataSource = mydataset; > dataGridView1.DataMember = "label"; あれ? 出力される XML は、<fruits> なのに、 DataMember に指定するテーブル名は "label" なのですか??
まず【質問1】の方ですが、 mydataset.Tables["label"] や mydataset.Tables["fruits"] の列定義などに 特に制限が無いのであれば、たとえば下記のコードで
<fruits> <name>りんご</name> <price /> </fruits>
な構造を出力されます。
var mydataset = new DataSet("kaz"); var tbl = mydataset.Tables.Add("fruits"); tbl.Columns.Add(new DataColumn("name", typeof(string)) { AllowDBNull = false, ReadOnly = true }); tbl.Columns.Add(new DataColumn("price", typeof(string)) { AllowDBNull = false, ReadOnly = true }); tbl.Rows.Add("リンゴ", "50"); tbl.Rows.Add("りんご", string.Empty); tbl.AcceptChanges();
dataGridView1.DataSource = mydataset; dataGridView1.DataMember = "fruits";
var sb = new System.Text.StringBuilder(); using (var output = new System.IO.StringWriter(sb)) { mydataset.WriteXml(output, XmlWriteMode.WriteSchema); } textBox1.Text = sb.ToString();
|