20個の値、データ列に対するテキストボックス、アルゴリズムによるチェック

StackOverflow https://stackoverflow.com/questions/606378

質問

さて、ここで大きな頭脳は、要件というよりも挑戦的なものです。私は少し困惑しています。通常、正しい方向の製品が必要なだけなので、プロディングスティックを用意してください。

テキストボックスで覆われたタブコントロールがあります。同じフォームのリストビューでSelectedIndexChangedイベントが発生しているときに、すべてのテキストボックスの内容のチェックを実行したい。テキストボックスの1つに、DataView行とは異なるデータ(ListViewアイテムで表される)がある場合、ユーザーが行った変更を保持するかどうかを確認する必要があります。何も変更されていない場合は、選択を変更するだけです。

つまり、明らかに、テキストボックスの内容をデータ行の関連列と比較しています。

チェックをブルートフォースして、個々のチェックを一度に1つずつ実行できます。 tabcontrolテキストボックスを巡回し、列の値に対して値をチェックする、巧妙なアルゴリズムの方法を考え出したいです。

提案はありますか

編集:「巧妙な名前のテキストボックス」が好きです。両方とも良いですが、以下のソリューションが最適です。 14日以内に他の誰もより良いアイデアを持っていない場合、テキストボックスの回答は緑色になります。

役に立ちましたか?

解決

テキストボックスに、名前の一部が列/行名であるように、巧妙な名前を付けます。

テキストボックスをグループ化して、ループを制御します。各コントロールについて、(部分)名を取得し、それをデータテーブルへの参照として使用します。値を確認します。

他のヒント

私があなたの言うことを正しく理解しているのなら、ListViewコントロールのSelectedIndexChangedイベントによって駆動される、変更されたテキストボックスをチェックするだけで、すべての変更ですべてのテキストボックスを比較するのを避けたいです。そうですか?

まあ、DataRowsとDataTablesにはすでに行のバージョン管理とロールバックが実装されているので、テキストボックスを基礎となる行にバインドする場合(変更/フォーカスの取り消しを書き戻すイベントを書くか、同じことを達成する自動化メカニズムを使用して)タスク)、SelectedIndexChangedのRowStateプロパティを確認します。 RowStateが変更されていない場合は、保存するようユーザーに求めます。保存する場合は変更をコミットし、そうでない場合は拒否します。

したがって、たとえば、SelectedIndexChangedイベントハンドラーには次のようなものが必要になります。

if (row.RowState == DataRowState.Modified) {
  // prompt for user input
  if (promptResult == PromptResult.Save) {
    row.AcceptChanges();
  }
  else {
    row.RejectChanges();
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top