2016-06-30 21 views
0

DataGridViewdatabaseから入力されたBindingSourceにバインドされています。DataGridView列には一意の値のみを指定できます

databaseフィールド「UnitNumber」は、100万の行があっても一意ではなくても常に1〜30の値になります。

別の関連分野の外部キー「RelateID」基本的に行のサブセットを形成 - のみUnitNumberを表す私のDataGridViewColumn中のSO 1〜30

ユニークUnitNumbersを持つことができます - 私はそれができたことを望みますUniqueこれは制限されています。言い換えれば、もしUnitNumbersがすでにDataGridViewに1から20入っていれば、ユーザーは行を追加します.UnderNumber 14をもう一度追加することはできません。行のために。

どのように私は、ユーザーが、すでにUnitNUmberDataGridView列に存在しない有効なUnitNumberに入ることを保証することができますか?

私はこれらの の列が現在一意の値を持っていないと私はエラーが私に言っているか知っているとこれが失敗 BindingsourceData ColumnUnique Constraintの設定について読んだことがある

- どのように - それは、基礎となるデータソースを参照私はDataGridViewColumnに制約を強制して、基底のData Sourceに強制的に強制することはできますか?

私はセルの検証イベントについても読んでいます。それが正しい場所であるかどうかわからない場合は、プロパティを使用して更新モードを変更すると問題が発生します。

何を実装私は、基礎となるDataSourceに影響を与えるアウトとDataGridView columnユニーク制約を達成するために使用する必要があります。

答えて

1

自動的に行う方法はありません。グリッドのCellValidatingイベントを処理し、現在の行の値の組み合わせを取得し、グリッド行をループして、その組み合わせがすでに存在するかどうかを判断し、存在した場合は検証に失敗します。検証に失敗すると、つまりe.CancelからTrueに設定すると、ユーザーが有効な値を入力するまでそのセルを離れることができなくなります。

+0

どのように効果がDataSourceUpdateモード - 私はプロパティが変更されないと思います - プロパティは、元のソースのイベントを変更し、また、セルはGridView上の更新を検証していないので、 – Ken

+0

それは正しいです。 – jmcilhinney

関連する問題