【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.NET TIPS

DataGridコントロールで行の追加/削除およびデータ編集を禁止するには?

デジタルアドバンテージ
2004/01/16

 デフォルトのDataGridコントロールでは、表示されている既存のデータをユーザーが編集でき、編集したデータはそのままDataGridコントロールに反映される。また、新しいデータを入力するための行(新規行)がグリッドの末尾に表示され、ここで入力したデータもそのままDataGridコントロールに追加される。

デフォルトのDataGridコントロール
デフォルトのDataGridコントロールでは、既存行で変更したデータはDataGridコントロールに反映され、新規行で入力したデータはDataGridコントロールに追加される。
  既存行では、データを編集できる。
  新規行では、新しいデータを入力できる。

 しかし、実際のDataGridコントロールの利用では、ユーザーがデータを変更したり、追加したりできないようにして、表示専用にしたい場合があるだろう。そのような場合には、DataGridコントロールでの行の追加/削除およびデータ編集を禁止することができる。

行の追加/削除およびデータ編集を禁止したDataGridコントロール
DataGridコントロールでは、行の追加/削除、データ編集を禁止することもできる。
  既存行のデータ編集ができない。
  新規行で新しいデータを追加できない。

 上図のように、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, "");
}
DataGridコントロールで行の追加/削除およびデータ編集を禁止するC#のプログラム
サンプル・プログラム(C#:dgallownew.cs、VB.NET:dgallownew.vb)のダウンロード

 前述のDataViewクラスの3つのプロパティ設定をDataGridコントロールに反映させるためには、プロパティ設定したDataViewオブジェクトをDataGridコントロールのデータソース(DataSourceプロパティ)に指定しなければならない。これには、DataGridコントロールのSetDataBindingメソッドを使う(もちろんDataSourceプロパティに直接代入することもできるが、その場合DataMemberプロパティも同時に設定する必要がある)。

 もしSetDataBindingメソッドで、DataGridコントロールのデータソース(第1パラメータ)にDataSetクラス(System.Data名前空間)のオブジェクトを指定した場合は、行の追加/削除やデータ編集を禁止するプロパティは使用できない(DataGridコントロールに反映されない)。これらのプロパティをDataGridコントロールに反映させるには、そのデータソースとして必ずDataViewクラスのオブジェクトを設定する必要がある。ただし、DataTableクラスのオブジェクトをデータソースに指定した場合には、そのDataTableクラスのDafaultViewプロパティがDataGridコントロールのビューとして使われるため、行の追加/削除やデータ編集を禁止するプロパティが設定可能となる。End of Article

カテゴリ:Windowsフォーム 処理対象:DataGridコントロール
使用ライブラリ:DataGridコントロール
使用ライブラリ:DataTableクラス(System.Data名前空間)
使用ライブラリ:DataViewクラス(System.Data名前空間)
使用ライブラリ:DataSetクラス(System.Data名前空間)
 
この記事と関連性の高い別の.NET TIPS
[ASP.NET]DataGridコントロールでデータセットを表示するには?
[ASP.NET]DataGridコントロールの編集用テキストボックスを大きくするには?
DataGridコントロールでソートを禁止するには?
DataGridコントロールを行選択モードにするには?
[ASP.NET]DataGridコントロールで編集を可能にするには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?