C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■87091 / )  Re[1]: datagridviewからxmlへの出力について
□投稿者/ WebSurfer (1465回)-(2018/04/11(Wed) 12:58:41)
No87059 (kaz さん) に返信

<追伸>

> 【質問2】
> datagridviewにチェックボックスが配置されていて
> チェックをつけたセルについては、
> <checked>true</checked>
> と出力されるのですが
> チェックがついていないセルについては
> 【質問1】の状況と似たように
> 項目自体が出力されません

こちらは自分が試した限りでは再現できませんでした。

DataGridView 上でのチェックボックスのチェックの有無と xml ファイルの true / false は
きちんと期待通りに対応します。

どのように試したかと言うと、以下の通りです。質問者さんのケースとどこが違うかチェック
してみてください。

(1) SQL Server の Microsoft のサンプルデータベースの Northwind の Products テーブルか
  ら以下のクエリを使ってインラインスキーマ付きの xml を生成。
use NORTHWIND
go
select top 5 * from Products FOR XML raw('product'),
   root('root'), elements, XMLSCHEMA('MyURI')

	UserInfo.xml という名
  前を付けて xml ファイルとして保存。

(2) Visual Studio で Windows Forms アプリのプロジェクトを作成。それに、上記 (1) の手順
  で作った xml を UserInfo.xml という名前を付けて保存。

(3) Windows Forms アプリに以下のクラスファイル(ビジネスロジック)を追加。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace EditXmlFileOnDataGridView
{
    public class UserInfoTable : IDisposable
    {
        const string filePath = @"C:\Users\...\UserInfo.xml";
        private DataSet myDataSet;

        public UserInfoTable()
        {
            myDataSet = new DataSet();
            myDataSet.Locale = System.Globalization.CultureInfo.InvariantCulture;
            myDataSet.ReadXml(filePath, XmlReadMode.ReadSchema);
        }

        public virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                myDataSet.Dispose();
            }
        }

        public void Dispose()
        {
            Dispose(true);
            System.GC.SuppressFinalize(this);
        }

        ~UserInfoTable()
        {
            Dispose(false);
        }

        public DataSet GetDataSet()
        {
            return myDataSet;
        }

        // ・・・中略・・・

        public void Save()
        {
            myDataSet.WriteXml(filePath, XmlWriteMode.WriteSchema);
        }
    }
}

(4) 自動生成されている Form1 にデザイン画面で DataGridView, Button を貼り付け。
  以下のコードを書く。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace EditXmlFileOnDataGridView
{
    public partial class Form1 : Form
    {
        private BindingSource bindingSource1 = new BindingSource();
        private UserInfoTable userInfo;

        public Form1()
        {
            InitializeComponent();
            this.userInfo = new UserInfoTable();
            DataTable table = userInfo.GetDataSet().Tables[0];
            table.AcceptChanges();
            this.bindingSource1.DataSource = table;
            this.dataGridView1.DataSource = bindingSource1;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.bindingSource1.EndEdit();
            this.userInfo.Save();
            this.userInfo.GetDataSet().Tables[0].AcceptChanges();
        }
    }
}

返信 編集キー/


管理者用

- Child Tree -