■ 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 : 列の幅が自動的に調整されるようにする