0

頭脳の皆さん、これは要件というよりも挑戦的なものです。私は少し困惑しています。私は通常、正しい方向に突き出す必要があるだけなので、突き棒を準備してください。

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

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

チェックを力ずくで行い、個々のチェックを一度に 1 つずつ行うことができます。タブコントロールのテキストボックスを巡回し、列の値に対して値をチェックする巧妙なアルゴリズムの方法を考え出すことをお勧めします。

助言がありますか?

編集:どちらも優れていますが、以下の「巧妙に名前が付けられたテキストボックス」ソリューションが一番好きです。次の 14 日間に他に誰も良いアイデアを思いつかない場合、テキスト ボックスの回答は緑色になります。

4

2 に答える 2

0

名前の一部が列/行の名前であるため、テキストボックスにわかりやすい名前を付けます。

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

于 2009-03-03T13:30:16.273 に答える
0

私があなたを正しく理解していれば、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();
  }
}
于 2009-03-03T13:30:16.337 に答える