Skip to content

Visual Basic.NET DataTableの小技②

Posted in Visual Basic .NET, プログラム関係, and 技術メモ


複数の値を属性と関連を保ちながらメモリ上で保存することができる標準機能に「DataTable」がある。
非常に重宝しているがすぐに使い方がわからなくなってしまう。
基本的な定義・使い方(コーディング)をメモしておく。(前回の続き)

前提定義:
Dim tblGetData As New DataTable
tblGetData.Columns.Add(New DataColumn(“伝票番号”, GetType(Long)))
tblGetData.Rows.Add()
tblGetData.Rows(0).Item(“伝票番号”) = 123456789

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【6、レコードデータの削除】
レコードデータを削除する場合はDeleteメソッドを使用します。
[DataTable定義名].Rows([行番号]).Delete()

★例:
tblGetData.Rows(0).Delete()
■解説:
tblGetDataテーブルの0行目(始めの行)を削除するという意味

※データ定義の無い場所(存在しない項目やデータの入っていない行)を指定した場合は例外が発生します。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【7、レコードデータの編集】
レコードデータを編集する場合はカラム名・行番号を指定して値を代入します。
[DataTable定義名].Rows([行番号]).Item(“[カラム名]”or[行番号]) = [代入したい名前]

★例:
tblGetData.Rows(0).Item(“伝票番号”)=987654321
■解説:
tblGetDataテーブルの0行目(始めの行)の伝票番号に「987654321」を代入するという意味

※データ定義の無い場所(存在しない項目やデータの入っていない行)を指定した場合は例外が発生します。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【8、応用1:テーブルの複製】
構造のまったく同じテーブルを複製することが可能
Dim [複製先DataTable定義名] As DataTable = [複製元DataTable定義名].Clone

★例:
Dim To_tblGetData As DataTable = tblGetData.Clone
■解説:
To_tblGetDataというDataTableを定義し、tblGetDataの構造をそのままクローン(複製)するという意味

また、Copyメソッドを利用して構造と値をコピーすることも可能
Dim [複製先DataTable定義名] As DataTable = [複製元DataTable定義名].Copy

★例:
Dim To_tblGetData As DataTable = tblGetData.Copy
■解説:
To_tblGetDataというDataTableを定義し、tblGetDataの構造と値をそのままクローン(複製)するという意味

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【9、応用2:指定したデータのみ複製したテーブルにコピーする】
構造のまったく同じテーブルを複製し、複製元の特定の値(レコード)のみをコピーする
Dim [複製先DataTable定義名] As DataTable = [複製元DataTable定義名].Select(“[特定の条件]”).CopyToDataTable

★例:
Dim To_tblGetData As DataTable = tblGetData.Select(“伝票番号 = 987654321”).CopyToDataTable
■解説:
To_tblGetDataというDataTableを定義し、tblGetDataの構造をそのままクローン(複製)したテーブルに「伝票番号」=987654321のデータレコードをコピーするという意味

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

【10、応用3:データテーブルをソートする】
テーブルデータをソートして運用したい場合があります。残念ながらDataTable自体にはソートをする機能はありません。
そこで.Select()機能を応用してこれと同じ効果を得られるようにしてみます。
DataTable.Select()メソッドは引数で指定した条件でDataRowの中のデータを返すというだけで、実際にDataTableの内部のデータをソートしてくれてはいません。

★例:
①Dim DataRows As DataRow() = tblGetData.Select(Nothing, “Age 伝票番号”).Clone()
②Dim To_tblGetData As DataTable = tblGetData.Clone

③For Each row As DataRow In DataRows

To_tblGetData.ImportRow(DataRows)

Next

■解説:
①[DataRow]を定義し、[tblGetData]のソートされた結果を格納する。
②[To_tblGetData]を定義しテーブル構造は[tblGetData]の内容を複製する。
③For文を使い[DataRows]の中身をすべて[To_tblGetData]に格納する。

■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□

まだまだ応用や使い道について調べてメモします。次回へ続きます。

Be First to Comment

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    CAPTCHA