前回の記事でC#でSQLiteが使えるようになった。
今回は、さらに進めてDataGridViewにテーブルの内容を表示してみる。
まずアプリの画面構成を示す。

前回のアプリの画面にDataGridViewを配置している。
このDataGridViewにテーブルのデータを表示させる。
コードは以下のようになる。
Form1.cs
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;
using System.Data.SQLite;
namespace SqliteLesson
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// テーブルの作成とデータ追加
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
using (SQLiteConnection con = new SQLiteConnection("Data Source=sqlitelesson.db"))
using (SQLiteCommand cmd = con.CreateCommand())
{
con.Open();
// テーブル作成
cmd.CommandText = "CREATE TABLE Lesson (ID INTEGER PRIMARY KEY, Name NVARCHAR(128), Age INTEGER)";
cmd.ExecuteNonQuery();
// データ追加
cmd.CommandText = "INSERT INTO Lesson (Name,Age) VALUES('Tom',43)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO Lesson (Name,Age) VALUES('John',29)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO Lesson (Name,Age) VALUES('Mike',35)";
cmd.ExecuteNonQuery();
}
}
private DataTable dataTable = new DataTable();
protected override void OnLoad(EventArgs e)
{
dataGridView1.DataSource = dataTable;
base.OnLoad(e);
}
/// <summary>
/// テーブルの内容を表示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
using (SQLiteConnection con = new SQLiteConnection("Data Source=sqlitelesson.db"))
using (SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT * FROM Lesson", con))
{
adapter.Fill(dataTable);
}
}
}
}
Createボタンの押下処理は前回と変わらない。
変更したのは49行目からである。より少ないコーディングで今回の機能を実現するため、DataTableクラスを使うことにした。
49行目で宣言したDataTableのインスタンスを53行目でDataGridViewのDataSourceに指定している。
62行目から69行目までがSelectボタンの押下処理となり、前回とは大きく異なっている部分である。
DataTableにデータをロードするにはSQLiteDataAdapterを使う。64行目でこのクラスのインスタンスを生成している。
ここでは、コンストラクタに”SELECT * FROM Lesson”というSQLを渡している。こうすることで、Fill()メソッドを呼ぶとLessonテーブルの全データがDataTableにロードされる。データがロードされると、自動的にDataGridViewにもそのデータが表示される。

このように、DataTableを使えばレコード分ループして行を追加してデータをセットする…というようなコードを省くことができる。
ピンバック: 【C#/実験】DataGridViewのDataSourceを別スレッドから更新するとどうなるか – ザワプロ!