■ DataGridViewに関するあれこれ
【1】 Checkboxを追加 【2】 Checkboxにチェックされたかどうか調べる 【3】 DataGridViewの表示内容を変更する 【4】 DataGridViewの値をマウスなど選択した場合、その行を取得したい 【5】 BindingSource を通して DataGridView にDBのデータを表示する 【6】 DataGridView の横スクロールが表示されない
その他のDataGridViewに関する関連記事
* 以下の関連記事を参照のことDataGridView ~ プロパティ編 ~
https://blogs.yahoo.co.jp/dk521123/14718079.html
DataGridView ~イベント編 ~
https://blogs.yahoo.co.jp/dk521123/23687833.html
DataGridView ~ ソート編 ~
https://blogs.yahoo.co.jp/dk521123/37914797.html
DataGridView ~ 画像・アイコン編 ~
https://blogs.yahoo.co.jp/dk521123/22293894.html
DataGridView を Label のように扱う
https://blogs.yahoo.co.jp/dk521123/29362064.html
DataGridView に ACCESS のデータを表示させる
https://blogs.yahoo.co.jp/dk521123/32859068.html
DataGridView に右クリックを適用する
https://blogs.yahoo.co.jp/dk521123/30488275.html
【1】 Checkboxを追加
private void Form1_Load(object sender, EventArgs e)
{
DataGridViewCheckBoxColumn column1 = new DataGridViewCheckBoxColumn();
dataGridView1.Columns.Add(column1);
}
【2】 Checkboxにチェックされたかどうか調べる
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 &&
dataGridView1[e.ColumnIndex, e.RowIndex].Value.Equals(true))
{
MessageBox.Show(string.Format("{0}行目のチェックボックスにチェック付きました"
, e.RowIndex));
}
else if (e.ColumnIndex == 0 &&
dataGridView1[e.ColumnIndex, e.RowIndex].Value.Equals(false))
{
MessageBox.Show(string.Format("{0}行目のチェックボックスにチェック外されました"
, e.RowIndex));
}
}
参考資料
http://dobon.net/vb/dotnet/datagridview/datagridviewcheckboxcolumn.htmlhttp://d.hatena.ne.jp/Seasons/20061002/1159719326
【3】 DataGridViewの表示内容を変更する
例えば、コードを表示用に変換したい場合などに使用する
サンプル
// DataGridViewの表示を変更
// DataGridViewの「性別コード」の表示を変更する
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataRowView dataRowView
= (DataRowView)this.dataGrid1.Rows[e.RowIndex].DataBoundItem;
TESTTABLERow row = (TESTTABLERow)dataRowView.Row;
// カラム名
string columnsName = this.dataGridViewPersonalDataList.Columns[e.ColumnIndex].Name;
// 性別(SexCode = 1なら「男」、それ以外は、「女」)
if ((TESTTABLETable.SEXCODEColumn.ColumnName).Equals(columnsName))
{
if (row.SEXCODE == "1")
{
e.Value = "男"
}
else
{
e.Value = "女"
}
}
}
【4】 DataGridViewの値をマウスなど選択した場合、その行を取得したい
例えば、マウスで選択した値をTextBoxなどの別のコントロールに反映するなどに使用できる
サンプル
// CellEnter処理回避フラグ
private bool flg = false;
// TESTテーブル
private TESTDataTable testTable = null;
// データグリッドにおいて、ユーザが選択した行のインデックス
private int selectedIndex = -1;
・・・略(TESTテーブルに値が入っている必要がある)・・・
// 検索結果データグリッドビュー_CellEnter
// 検索結果データグリッドビューの表示を変更
private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (!this.flg
&& e.RowIndex >= 0 // 選択されたインデックスが0以下
&& (this.testTable != null && this.testTable.Count >= e.RowIndex) // 選択されたインデックスがテーブルのデータ数以上
&& e.RowIndex != this.selectedIndex // 選択されたインデックスが以前のものと異なる
)
{
// 選択されたインデックスを取得
this.selectedIndex = e.RowIndex;
// 選択された情報のデータローを取得(dataRowView.Rowで取得できる)
DataRowView dataRowView
= (DataRowView)this.dataGridView.Rows[this.selectedIndex].DataBoundItem;
【5】 BindingSource を通して DataGridView にDBのデータを表示する
準備
* bindSource : 1 * dataGridView : 1 * DataBase : 1 (仮に「customerDB.mdb」にある「customer」テーブル)
サンプル
System.Data.OleDb.OleDbConnection connection
= new System.Data.OleDb.OleDbConnection();
System.Data.OleDb.OleDbDataAdapter dataAdapter;
DataSet dataSet = new DataSet("customer");
// 接続文字列の作成
string path = "C:\\customerDB.mdb";
connection.ConnectionString = string.Format(
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source={0};" +
"Persist Security Info=False", path);
// SQL文作成
dataAdapter = new System.Data.OleDb.OleDbDataAdapter(
"SELECT * FROM customer", connection);
// データセットにデータを設定する
dataAdapter.Fill(dataSet, "customer");
// データソースを連結する
this.bindingSource.DataSource = dataSet;
this.bindingSource.DataMember = "customer";
// DataGridViewにBindingSourceを連結
this.dataGridView.DataSource = this.bindingSource;
参考資料
http://hiros-dot.net/CS2005/Control/BindingSource/BindingSource02.htm【6】 DataGridView の横スクロールが表示されない
【確認点1】DataGridView の列(DataGridViewColumnオブジェクト)のプロパティ Frozen が true になっている
* 1項目でも「Frozen:true」になっていると横スクロールが行われない
* 「固定列のとき、列の AutoSize モードを Fill に設定することはできません。」という
エラーが表示された場合、「Frozen:true」になっている可能性あり
参考資料
http://www.atmarkit.co.jp/fdotnet/dotnettips/509dgvfrozen/dgvfrozen.html【確認点2】DataGridView の列(DataGridViewColumnオブジェクト)のプロパティ AutoSize が Fill になっていないか確認する
* 「AutoSize :None」にして動作を確認
【確認点3】プロパティ ScrollBars を確認する
* ScrollBars : スクロール バーの種類を指定
【確認点4】プロパティ AutoSizeColumnsMode が Fill になっていないか確認する
* 「AutoSize :None」にして動作を確認 * AutoSizeColumnsMode : 列の幅が自動的に調整されるようにする