【C#】DataTable ~ 基本編 ~

■ はじめに

https://blogs.yahoo.co.jp/dk521123/10415992.html
の続き。

今回は、「基本的な使い方」「使用上の注意」をまとめる

■ 基本的な使い方

データを追加するには...

var dataTable = new DataTable();

dataTable.Columns.Add("ID", typeof(string));
dataTable.Columns.Add("Value", typeof(string));

dataTable.Rows.Add("X001", "Tokyo");
dataTable.Rows.Add("X002", "Osaka");

データを任意の場所に挿入する

InsertAt(【DataRow】, 【インデックス】)を使う
using System;
using System.Data;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    private DataTable dataTable;

    public Form1()
    {
      InitializeComponent();

      this.dataTable = new DataTable();

      this.dataTable.Columns.Add("ID", typeof(string));
      this.dataTable.Columns.Add("Value", typeof(string));

      this.dataTable.Rows.Add("X002", "Tokyo");
      this.dataTable.Rows.Add("X001", "Osaka");

      this.dataGridView1.DataSource = dataTable;
    }

    private void button1_Click(object sender, EventArgs e)
    {
      var datarow = this.dataTable.NewRow();
      datarow["ID"] = "X003";
      datarow["Value"] = "Nagoya";
      this.dataTable.Rows.InsertAt(datarow, 0);
    }
  }
}
参考文献
http://noudikara.jugem.jp/?eid=15
https://accelboon.com/tn/c-datarow%E3%81%AE%E9%85%8D%E5%88%97%E3%82%92datatable%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B/

特定の値を取得するには...

 * いくつか方法があるが、結局は「例3:Linqを使用した場合」がいいと思う
例1:Select() を使用した場合
DataRow[] rows = this.dataSet.testTable.Select("id = true");
foreach (dataSet.testTableRow row in rows)
{
    // ★ここに処理を書く
}
例2:Whereを使用した場合
var items = this.dataSet.testTable.Where(row => row.flg == true)

foreach (var item in items)
{
    // ★ここに処理を書く
}
http://www.atmarkit.co.jp/fdotnet/basics/adonet06/adonet06_01.html
例3:Linqを使用した場合
 * 以下の関連記事も参照。
https://blogs.yahoo.co.jp/dk521123/37976709.html

■ 使用上の注意

DataTable の Clone() について

 * DataTable の Clone() は、他のクラスの Clone() と結果が違う
  => Clone() は、構造だけコピー(データはコピーされない)
  => データも含めてインスタンス生成したい場合は、 Copy() を使う
参考文献
http://teabreak.info/blog/2013/11/19/c-datatable%E3%81%AEclone%E3%81%A8copy/1596/
http://okwakatta.net/code/dst08.html

関連記事

DataTable関連

DataTable ~ 基礎知識編 ~
https://blogs.yahoo.co.jp/dk521123/10415992.html
DataTable ~ あれこれ編 ~
https://blogs.yahoo.co.jp/dk521123/20413895.html
DataTable ~ DISTINCT / 重複した値を省くには... ~
https://blogs.yahoo.co.jp/dk521123/14321146.html
DataTable ~ 重複を気にせずカウントするには... ~
https://blogs.yahoo.co.jp/dk521123/31382607.html
DataSet / DataTable ~ データテーブルのソート ~
https://blogs.yahoo.co.jp/dk521123/15231236.html
DataSet と TableAdapter について
https://blogs.yahoo.co.jp/dk521123/10415992.html
DataTable ~ DataTable で Linq する ~
https://blogs.yahoo.co.jp/dk521123/37976709.html