- PR -

DataGridでの更新はできなく、追加だけしたい

1
投稿者投稿内容
初心者さん
会議室デビュー日: 2005/08/25
投稿数: 16
投稿日時: 2006-02-22 10:32
いつもお世話になります。
VB.NETで開発しています。

DataGridで既に登録されている内容は変更出来ないようにして
新規での追加のみを行えるようにしたいですが

Dim cm As CurrencyManager = CType(Me.BindingContext(grdObj.DataSource), CurrencyManager)
 Dim dv As DataView = CType(cm.List, DataView)
 dv.AllowNew = True
 dv.AllowEdit = False
 dv.AllowDelete = False

とすると新規追加行の編集も出来なくなってしまいます。
なにかいい方法はないでしょうか?
マー帽
常連さん
会議室デビュー日: 2006/01/31
投稿数: 21
投稿日時: 2006-03-02 23:35
もう解決済みかも知れませんが、1例です。

DataGridTableStyleを使用したプログラムでcell単位に変更禁止の制御をしたかったので
下記のようなプログラムを作成した事があります。

CurrentCellChangedイベントが発生した時にそのcellが入力可能かどうか検査し、
入力不可の時にはDataGridColumnStyleのReadOnlyプロパティをTrueにする。
入力可能な時にはFalseにするというものです。
(Windows.Forms.DataGridTextBoxColumn等)

注意しなければならないのは、DataGridにユーザー作成のComboBox等を
使用している時ですが、ReadOnlyプロパティを考慮したサンプルは少ない様に思われます。
ですが、標準のColumnStyleだけでしたら上記の方法で一応動作すると思います。

後は、新規追加中であるか否かをどう判定するかという事ですね。


例えば2行追加するとして1行目を入力後2行目を入力開始した時に
1行目を入力禁止とするのでしょうか?
それとも1行目の1項目目を入力し2項目目にカーソル移動した時に
1項目目を変更禁止とするのでしょうか?
実際問題として、この様な仕様を組み込む目的(必要性)が分からないのですが、
何故登録のみ可能したいのかという事の「目的」が明確になれば
もう少し良い案が出てくるのではないでしょうか?
マー帽
常連さん
会議室デビュー日: 2006/01/31
投稿数: 21
投稿日時: 2006-03-03 09:46
引用:

CurrentCellChangedイベントが発生した時にそのcellが入力可能かどうか検査し、
入力不可の時にはDataGridColumnStyleのReadOnlyプロパティをTrueにする。
入力可能な時にはFalseにするというものです。



ちなみに、上記の方法は新規登録不可のDataGridだったので簡単でしたが、
新規登録可能な場合は色々と面倒だと思いますので、
私ならば下記の案で代用する事を検討します。

DataGridを2つ作成し、片方は既存のデータを変更不可で表示します。
もう片方は新規登録と変更可能なもので、空のものを表示します。
新規登録後、確定されたデータを変更不可のDataGridに移動します。
そうすればあまり細かな作り込みは必要ないと思いますので。
DataViewをうまく使用すれば、1つのDataTableで対応できるでしょう。

1

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