0

これは非常に一般的なワークフローであるはずなので、C# gridview も DevExpress も簡単な方法を提供していないことに驚いています。

例:
MyColumn は、コンボボックス タイプの列のフィールドです。ユーザーがこのフィールドの値を編集しようとすると、ドロップダウン リストで値を選択する必要があります。グリッドが 1 行の場合、「値 A」、「値 B」、または「値 C」から選択できます。ユーザーが 1 行目で「値 A」を選択した場合、2 行目で MyColumn に使用できる値は「値 B」と「値 C」になります。

現在、削除、挿入、または変更操作のたびにコンボボックス リポジトリを計算し (RepositoryItemComboBox.Items プロパティを変更)、CustomRowCellEdit イベント ハンドラで、更新されたリポジトリを列に割り当てます。コードは非常に複雑で脆弱です。

------更新------ ユースケースのより良い例を思いつきました: グリッドがユーザーに、米国で最も好きな 5 つの州を選択するように求めているとします。したがって、State 列は、最初に 50 の状態のリストを持つコンボボックス タイプの列です。ユーザーが最初の行で CA を選択した場合、2 行目では 49 の州しか選択できません。この場合、常に各行で値を一意にする必要があります。そうしないと意味がありません。

4

2 に答える 2

1

考えたことがあるかもしれません。ただし、まだ行っていない場合に備えて:

毎回リポジトリを変更しようとするよりも、(コンボボックスの onchange イベントで) コンボで選択された値を実際に検証し、重複している場合にこのアイテムのユーザー選択をオーバーライドする方がよいと思います。

注: また、リポジトリを変更すると、独自の問題が発生すると思います。削除、挿入、または変更のたびに DataSource を変更すると、他のコンボ ボックスのデータが変更されるためです (明らかに、ここでは、すべてのコンボが同じデータソースを使用すると想定しています)。

于 2013-07-25T03:06:13.823 に答える
0

解決策があります。

CustomRowCellEditForEditing イベントを処理します。ハンドラーで、すべての行を走査して選択されたすべての項目を取得し、選択された項目を repositoryItemComboBox1.Items から削除します (それが列エディターであるとします)。
もちろん、ユーザーが行を編集または削除するときに Items コレクションも変更する必要があるため、ロジックはもう少し複雑です。

注意:
CustomRowCellEdit は間違った方法です。RepositoryItemComboBox.Items が変更されるたびにイベントが発生するためです。

于 2013-08-01T21:56:25.763 に答える