デフォルトのDataGridコントロールでは、表示されている既存のデータをユーザーが編集でき、編集したデータはそのままDataGridコントロールに反映される。また、新しいデータを入力するための行(新規行)がグリッドの末尾に表示され、ここで入力したデータもそのままDataGridコントロールに追加される。
デフォルトのDataGridコントロール
デフォルトのDataGridコントロールでは、既存行で変更したデータはDataGridコントロールに反映され、新規行で入力したデータはDataGridコントロールに追加される。
(1)既存行では、データを編集できる。
(2)新規行では、新しいデータを入力できる。
しかし、実際のDataGridコントロールの利用では、ユーザーがデータを変更したり、追加したりできないようにして、表示専用にしたい場合があるだろう。そのような場合には、DataGridコントロールでの行の追加/削除およびデータ編集を禁止することができる。
行の追加/削除およびデータ編集を禁止したDataGridコントロール
DataGridコントロールでは、行の追加/削除、データ編集を禁止することもできる。
(1)既存行のデータ編集ができない。
(2)新規行で新しいデータを追加できない。
上図のように、DataGridコントロールで行の追加/削除やデータ編集を禁止するには、DataGridコントロールのデータソースとして設定している、DataTableクラスのビューを表すDataViewクラス(System.Data名前空間)のオブジェクトの次の3つのプロパティをfalseに指定すればよい(いずれのプロパティもデフォルトはtrueになっている)。
- AllowNewプロパティ(新規行属性)
- AllowDeleteプロパティ(行削除属性)
- AllowEditプロパティ(データ編集属性)
これらのプロパティ設定を行う具体的なコードを次に示す。なお、このコードでは、DataGridコントロールのビューとして、DataTableクラス既定のDataViewオブジェクトであるDefaultViewプロパティを使っている。
private void Form1_Load(object sender, System.EventArgs e)
{
// テーブルを作成
DataSet dataSet1 = new DataSet("商品マスター");
DataTable dataTable1 = dataSet1.Tables.Add("商品テーブル");
DataColumn dataClumn1 = dataTable1.Columns.Add("ID", typeof(int));
DataColumn dataClumn2 = dataTable1.Columns.Add("商品");
DataColumn dataClumn3 = dataTable1.Columns.Add("個数", typeof(int));
// テーブルにデータを追加
dataTable1.Rows.Add(new Object[] {1, "みかん", 100});
dataTable1.Rows.Add(new Object[] {2, "パイナップル", 300});
dataTable1.Rows.Add(new Object[] {3, "バナナ", 120});
dataTable1.Rows.Add(new Object[] {4, "すいか", 280});
dataTable1.Rows.Add(new Object[] {5, "いちご", 200});
dataTable1.Rows.Add(new Object[] {6, "メロン", 150});
// データグリッドの行の追加と削除、データ編集を不許可にする
dataTable1.DefaultView.AllowNew = false;
dataTable1.DefaultView.AllowDelete = false;
dataTable1.DefaultView.AllowEdit = false;
// データグリッドにテーブルを表示する
// (データソースにDataViewを使う)
dataGrid1.SetDataBinding(dataTable1.DefaultView, "");
}
前述のDataViewクラスの3つのプロパティ設定をDataGridコントロールに反映させるためには、プロパティ設定したDataViewオブジェクトをDataGridコントロールのデータソース(DataSourceプロパティ)に指定しなければならない。これには、DataGridコントロールのSetDataBindingメソッドを使う(もちろんDataSourceプロパティに直接代入することもできるが、その場合DataMemberプロパティも同時に設定する必要がある)。
もしSetDataBindingメソッドで、DataGridコントロールのデータソース(第1パラメータ)にDataSetクラス(System.Data名前空間)のオブジェクトを指定した場合は、行の追加/削除やデータ編集を禁止するプロパティは使用できない(DataGridコントロールに反映されない)。これらのプロパティをDataGridコントロールに反映させるには、そのデータソースとして必ずDataViewクラスのオブジェクトを設定する必要がある。ただし、DataTableクラスのオブジェクトをデータソースに指定した場合には、そのDataTableクラスのDafaultViewプロパティがDataGridコントロールのビューとして使われるため、行の追加/削除やデータ編集を禁止するプロパティが設定可能となる。
カテゴリ:Windowsフォーム 処理対象:DataGridコントロール
使用ライブラリ:DataGridコントロール
使用ライブラリ:DataTableクラス(System.Data名前空間)
使用ライブラリ:DataViewクラス(System.Data名前空間)
使用ライブラリ:DataSetクラス(System.Data名前空間)
Copyright© Digital Advantage Corp. All Rights Reserved.