.net column
.NET開発者のためのブログメディア

DataTableとは?作成するための4手順や活用方法を紹介

2019年10月23日
PG
DataTableっていう名前から予測すると、テーブルか何かを作成できるんですかね?
PM
そのとおり!さっそく見ていきましょう。

DataTableとは?

DataTableはMicrosoft.Net Frameworkに用意されているクラスで、VB.NETやC#のプログラミングでよく使います。

DataTableクラスを使うと、表形式のデータを扱うのに必要なメソッドがあらかじめ用意されているので、コーディングが楽になります。

また、内部処理ではDataTableクラスを使ってデータを整え、表示の際にDataGridViewにデータを移送することも可能です。

DataTableを作成する4手順

はじめに、DataTableでテーブルを作成する際の流れを把握しておきましょう。.NET FrameworkのDataTableクラスを使うためには、まず.NET Frameworkの環境が必要になります。

C#もしくはVB.NETのフォームで、DataTableクラスを使ってデータ表を作成します。C#とVB.NETでは操作性が異なる部分もありますが、DataTableのコードとしては同じイメージで使うことが可能で、手順は以下のとおりです。

  • Windowsフォームで下準備
  • DataTableクラスを利用する
  • 宣言を行う
  • カラム名を追加する
  • テーブルを表示する

DataTableの使い方1:Windowsフォームで下準備

DataTableクラスを使った結果を簡単に確認できるよう、Windowsフォームを使って実装してみましょう。

DataTableクラスはプログラムの内部処理に使うクラスなので、結果をフォームで確認するためには、DataTableクラスの設定値をフォーム表示可能なコントロールに移送して表示させます。ここではDataGridViewを使って内容を表示するので、フォームに配置しておきましょう。

DataTableの使い方2:DataTableクラスを利用する宣言を行う

プログラムの中でDataTableクラスを利用する際は宣言が必要です。SampleTBLという変数を使う場合、DataTableの宣言は以下のように記述します。

System.Data.DataTable table = new DataTable(“”SampleTBL””);
または
using System.Data;
DataTable table = new DataTable(“”SampleTBL””);

DataTableの使い方3:カラム名を追加する

フォームに表を表示したときに、各列が何の値を表示しているのかわかるように列名を表示させましょう。ここでは例として1列目を「項番」、2列目を「商品名」、3列目を「価格」として説明します。DataTableクラスへの列名の追加は以下のように記述します。

SampleTBL.Columns.Add(“”項番””, Type.GetType(“”System.Int32″”));
SampleTBL.Columns.Add(“”商品名””);
SampleTBL.Columns.Add(“”価格””, Type.GetType(“”System.Int32″”));

DataTableの使い方4:テーブルを表示する

カラム名がきちんと設定されたかフォームに表示して確認してみましょう。DataTableのデータをDataGridViewにセットしてフォームに表示させます。

DataGridView1.DataSource = SampleTBL;

フォームを実行するとカラム名だけが表示されますが、データ内容も表示させるときは、「SampleTBL.Rows.Add(1,””石鹸””, 150);」のように行データを追加したうえで、DataGridViewに移送します。

DataTableの活用方法7つ

ここまでの説明の中では、DataTableを使ってプログラム内部で表を定義し、DataGridViewコントロールにDataTableのテーブル内容すべてをセットしてフォームに表示させました。

DataTableクラスはプログラム内部で表を作成し、アウトプットに利用できますが、ほかにどのような場面で使われるクラスなのでしょう。ここでは、DataTableクラスの活用方法を紹介します。

DataTableの活用方法1:データ抽出

DataTableクラスを使っていれば、SELECTメソッドやLINQを使ってデータを抽出できます。LINQはプログラム内で使えるクエリの一種で、データ抽出速度はSELECTメソッドより速くなります。

商品名が「牛乳」のデータを抽出
DataRow[] dR = SampleTBL.AsEnumerable()
.Where(row => row.Field(“”商品名””) == “”牛乳””).ToArray();

DataTableの活用方法2:絞り込み

DataTableクラスのSELECTメソッドは、データを絞り込めます。SELECTメソッドは、条件を設定してデータ抽出に使うことも可能です。

例えば、「項番/商品名/価格」という3つの列を定義したDataTableクラスから、「価格が1,000円以上のもの」という条件で絞り込みたい場合は、以下のように記述します。

DataRow[] dR = SampleTBL.Select(“”価格 >= 1000″”);

DataTableの活用方法3:ソート

DataTableクラスに格納されたデータをソートさせられますが、その方法はSELECTメソッドを使う方法とLINQを使う方法です。

DataTableクラスでは、データ抽出にもSELECTを使う方法とLINQを使う方法がありますが、ソートはデータ抽出文の応用記述になります。どちらのパターンを使う場合でも、データ抽出文の一部を変更または追記すれば、ソート文になります。

Selectを使う場合

DataTableクラスでSELECTメソッドを使ってソートを行う場合は、データ抽出文の中にソートキーとなる列名と「昇順」を表す「ASC」もしくは降順を表す「DESC」を記述します。SELECTメソッドの第二引数にソート関連文字列を記述します。

商品名:牛乳を価格の高い順に表示する場合(降順)
DataRow[] dR = SampleTBL.Select(“”商品名= ‘牛乳'””, “”価格 DESC””);

LINQを使う場合

DataTableクラスでLINQを使ってソートを行う場合は、データ抽出文の後でソートキー指定を追記します。昇順を指定する場合はOrderByメソッドを、降順指定する場合はOrderByDescendingメソッドを使います。

商品名:牛乳を価格の高い順に表示する場合(降順)
DataRow[] dR = SampleTBL.AsEnumerable()
.Where(row => row.Field(“”商品名””) == “”牛乳””)
.OrderByDescending(row => row.Field(“”価格 “”)).ToArray();

DataTableの活用方法4:集計演算

DataTableのComputeメソッドを使ってDataTableクラスに格納したデータの集計演算ができます。Computeメソッドの構文と例は、以下のように表されます。

Compute (string expression, string filter);
expression:計算する式
filter:式で評価される行を制限するフィルター

object obj = SampleTBL.Compute(“”Max(価格)””, “”商品名= ‘牛乳'””);

DataTableの活用方法5:1行分のデータを取得する

DataTableクラスにセットされている表形式のデータを、1行単位で追加したり取得したりするときは、DataRowクラスを使います。また、DataTableを使ってデータ抽出をしたり、ソートしたりするときも利用しています。

DataTable SampleTBL = new DataTable(“”Table””);
DataRow dRow = SampleTBL.NewRow();
dRow[“”項番””] = 253;
dRow[“”商品名””] = “”ボールペン””;
dRow[“”価格””] = 98;
SampleTBL.Rows.Add(dRow);

DataTableの活用方法6:データベースのデータを使う

データベースからデータを取得したり、逆にセットしたりするときは、DataTableの親集合体であるDeataSetを使います。また、DataSetはデータベースだけでなく、画面とのデータのやり取りでも活用できます。

DataSet dsSample = new DataSet(“”Tables””);
~ 中略(データベースアクセス記述) ~
DataTable SampleTBL;
SampleTBL= dsSample.Tables[“”Shohin””];

DataTableの活用方法7:画面にデータを表示する

DatTableに設定した値はプログラム内部で利用しますが、DataGridViewにデータを移送して、ユーザが参照できる画面フォームに表示することも可能です。

カラム名およびデータがセットされたDataTable:SampleTBL
フォーム上のDataGridViewのオブジェクト名:objGridView
objGridView.DataSource = SampleTBL;

DataTableにデータを追加する方法

DataTableの使い方の例の中で、カラム名の追加について触れましたが、データ部分も同様に1行1行追加していくことができます。1行ずつ追加する方法もコード記述は一律ではなく、データの扱い方に適した方法を選択して記述できます。

ここでは、DataTableに直接値を追加していく方法と、1行単位でデータを作成して、DataTableクラスに移送する方法を紹介します。

Rows.Add

DataTableクラスの変数にデータを追加していくときは、DataTableクラスのRowsプロパティのAddメソッドを使います。そして、Rows.Addではデータを1行ずつ追加していきます。

カラム名「項番/商品名/価格」のDataTableクラスSampleTBLに行データ追加
SampleTBL.Rows.Add(1, “”石鹸””,230);
SampleTBL.Rows.Add(2, “”タオル””,100);

DataRow

DataRowクラスにデータを設定しておいて、DataRowのTableプロパティを使って、データをまるごとDataTableクラスに移送するという方法もあります。また、DataRowに設定した値を1行ずつRows.Addで追加することも可能です。

カラム名「項番/商品名/価格」の行データ追加
DataRow dR
dR[“”項番””] = 1;
dR[“”商品名””] = “”石鹸パン””;
dR[“”価格””] = “”230″”;
DataTable SampleTBL= dR.Table;
または
DataTable SampleTBL.Rows.Add(dR);

PG
たったこれだけでテーブルが作成できるんですね!
PM
ちなみに、ここでは紹介していないけど、DataSetクラスではテーブル間の関係も保持できるんですよ。後で使ってみましょう!

DataTableクラスを使えば簡単に表形式データを作成できる

今回は、DataTableクラスについて解説しました。DataTableクラスを使うことで簡単に表形式のデータを作成することができるので、この記事を参考にぜひ業務内でもDataTableを利用してみてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags