0

DropDownList に入力するために使用される SQL テーブルに値のリストがあり、各項目の値として一意の整数を持ち、(SqlDataSource を介して) 表示されるテキストとして文字列を持ちます。データベースには、リスト項目がアクティブかどうかを示すフラグである 3 番目のフィールドもあります (非アクティブな項目は DropDownList に表示されません)。

ドロップダウンで行われた選択は、テキスト値ではなく、整数値として (レコード全体を構成するデータセットの一部として) データベースに保存されます。

時間の経過とともに、項目を非アクティブとしてマークすることにより、DropDownList 内の項目が削除される場合があります。ただし、データの一部として現在非アクティブなアイテムが含まれている可能性がある古いレコードを開く必要はまだあります...

私の質問は、古いレコードのドロップダウンに欠損値が含まれていることを確認する最善の方法は何ですか?

頭に浮かぶ2つの方法は、次のいずれかです。

現在アクティブなアイテムのみを DropDownList に入力し、レコードをロードするときに、アプリが存在しない値を選択しようとしたときにそれをキャッチし、データベースに戻ってそれがどうあるべきか (テキスト値) を確認し、手動で追加しますドロップダウンに。

また...

DropDownList にすべてのリスト項目 (アクティブと非アクティブの両方) を設定し、レコードをロードしてから、すべての非アクティブな項目をプログラムで削除します (現在選択されているものはすべて除外)。

これらはどちらも特に効率的とは思えないので、この種のベストプラクティスがあるかどうか疑問に思っていましたか?

4

2 に答える 2

1

そのようなことを行うための最適な方法はたくさんあります。ここでいくつか定義します。ドロップダウンリストのアイテム数が200未満の場合は、次のいずれかを使用します。たとえば、ドロップダウンリストは製品のものです。

1)
      i)ドロップダウンリストにすべての製品レコードをロードし、 visible =false
を設定して非アクティブなレコードを非表示      にします。プロパティvisible=trueを設定して表示するよりも表示します。また、フラグにインデックスまたはIDを設定して、ユーザーが操作を実行した後で、可視性(visible = false)を再度変更します。

2)
      i)ドロップダウンリストにアクティブな製品
レコードのみをロードします      。ii)ユーザーレコードをロードするときに、SQLの 結合を使用して製品の詳細(名前、ID、inactive_status)もロードします。iii)アイテムが非アクティブである場合      はそのユーザーレコードをチェックインし、ドロップダウンリストにそのレコードを追加します。これですべての詳細がユーザー詳細レコードとともに表示されるため、それ以外の場合は選択するだけです。

重要な注意:ドロップダウンリストに数百万のアイテムがある場合は、高度な検索手法を使用してください

于 2012-05-04T12:12:00.780 に答える
0

私が最初に行うことは、あなたのビジネス ロジックに質問することです。アイテムが他のアクティブな行で外部キーとして使用されている場合、そのアイテムを非アクティブにすることができるでしょうか? 非アクティブにすると、すべての外部キーも削除されませんか?

あなたの質問に答えるには、2番目のアイデアのバリエーションを使用しますが、そのようなページでのフィルタリングは、SQLで直接行うよりもおそらく遅いので、現時点でドロップダウンに入力するためにこのようなものがあると思います

SELECT * FROM Table WHERE Active = 1

レコードと外部キーの値が既にあるはずなので、これに変更します

SELECT * FROM Table WHERE Active = 1 OR PrimaryKey = [YourForeignKey]

そうすれば、常に選択したアイテムが得られますが、かなり効率的でもあります。

于 2012-05-04T11:41:00.083 に答える