DataSet、DataTableの取り扱いについて要点

・色々なデーター上の取り扱いを考えるとDataTableだけでテーブルを管理せず、必ずDataSetに割り当てて追加編集などすると作業能率が良い
・XMLWrite等の機能はDataSetにある
・デバッガなどでDataSetの値は虫眼鏡のアイコンをクリックするとデータグリッドとして表示され全体を把握確認できる

各データの関係は
http://okwakatta.net/code/dst22.html
が非常に分かりやすい例を示している


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

namespace DataBindingTest2
{
    public partial class Form1 : Form
    {
        DataSet dataSet;
        DataTable dataTable;

        public Form1()
        {
            InitializeComponent();
            Init();
            DoWork();
        }

        private void DoWork()
        {
            dataSet.Tables["SaveDataTable"].AcceptChanges();                //アンドゥポイント
            DataRow row = dataSet.Tables["SaveDataTable"].NewRow();         //テーブル"SaveDataTable"のRowsの「型」書式を取り出す
            row["Name"] = "ABCDEF";
            row["FileLocation"] = "c:\\test2.jpg";
            row["PointX"] = 12;
            row["PointY"] = 24;
            dataSet.Tables["SaveDataTable"].Rows.Add(row);                  //各値をセットしテーブルに加える(データセットから編集している点に注目)

            dataSet.Tables["SaveDataTable"].Rows[2]["Name"] = "Test3";      //既存の値を書き換える(こちらもデータセットから編集している点に注目)
            dataSet.Tables["SaveDataTable"].Rows[1].Delete();
            dataSet.Tables["SaveDataTable"].RejectChanges();                //アンドゥしている

            //検索抽出(LINQに似た検索抽出が可能)
            DataRow[] dr = dataSet.Tables["SaveDataTable"].Select("PointX > 255");
            foreach (var item in dr)
            {
                Console.WriteLine("{0} {1}",item["Name"],item["PointX"]);
            }
        }

        private void Init()
        {
            dataTable = GetDataTablePictureSetting();
            dataSet = GetSaveDataSet();
        }

        private DataSet GetSaveDataSet()
        {
            DataSet ds = new DataSet();
            ds.Tables.Add(dataTable);
            return ds;
        }

        private DataTable GetDataTablePictureSetting()
        {
            //ここで行の書式を決定している
            DataTable dt = new DataTable("SaveDataTable");
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("FileLocation", typeof(string));
            dt.Columns.Add("PointX", typeof(int));
            dt.Columns.Add("PointY", typeof(int));
            dt.Columns.Add("Display", typeof(string),"Name + FileLocation + PointX + PointY");

            //新規に列を追加したり内容を編集できる(Rowsには名前を付けられない事に注目)
            dt.Rows.Add(new object[] { "Test1", "c:\\test.jpg", 128, 128 });
            dt.Rows.Add(new object[] { "Test2", "c:\\test3.png", 64, 64 });
            dt.Rows[1]["PointX"] = "256";                                       //値の型が数字の場合必ずしも""は必要ない

            return dt;
        }
    }
}
最終更新:2012年09月04日 22:47