3

相互にマップできる一意の ID を持つ 2 つのテーブルがあります (1 つのテーブルはアプリケーションの外部のデータベースから取得されますが、追跡している同じエンティティに関する情報が含まれています)。「自分の」レコードを「他の」レコードにリンクするための UI を提供したいので、一致するレコードのテーブルに「他の」ID を格納できます。簡単に言えば、主要な UI 要素は、「その他」のテーブルから利用可能な (つまり、まだリンクされていない) レコードを表示するドロップダウン リストです。

各行に「自分の」レコードを表示するためのグリッドビューに加えて、「他の」テーブルのリンクされたレコードからの情報を表示する列があります。データは建物とプロパティに関するものなので、次のようになります。

Building1   Dallas   TX    Building1_Dallas_TX
Building2   Memphis  TN    Bldg2_Memphis_TN
Building3   Denver   CO
Building4   Seattle  WA
Building5   Boston   MA    Building5_Boston_MA

ここで、最初の 3 列は「my」テーブルからの情報を示し、最後の列は「other」テーブルからの一致するレコードを示します。レコードは既にリンクされています。それ以外の場合はリンクが確立されていない空白です。私の実際のグリッドビューには、「私の」テーブルからさらにいくつかの列がありますが、必要性を説明するにはこれで十分です。

行の [編集] (表示されていません) をクリックすると、4 つの列すべてを編集できるようにしたいと考えています。最初の 3 つはテキスト ボックスです。最後の列は、「他の」テーブルからのリンクされていないすべてのレコードを表示するドロップダウンリストである必要があります。また、「未割り当て」オプション (リストの最初の項目として) を追加して、レコードを「リンク解除」するか、単に未割り当てのままにすることができますすでにリンクが確立されている行) リンクされたアイテム (「使用済み」ですが、引き続き使用できるようにそこにある必要があります)。

gridview RowEditing イベントのコード ビハインドでドロップダウンリストを正しく設定できます (AppendDataBoundItems オプションを true に設定して .aspx に ListItem として追加する Unassigned 項目を除く)、ddl の DataBound に正しい SelectedValue を設定できます。イベントですが、ポストバックでクリックして行を更新すると、ddl には (未割り当てのアイテムを除いて) もうアイテムが含まれていないため、リンクは常にクリアされます。テーブルを直接編集してリンクを手動で設定すると、すべてが編集モードに入ると問題なく表示されます。ddl には正しいアイテムが含まれており、正しいアイテムが事前に選択されますが、更新のポストバックですべてが失われます。ページサイクルのさまざまな段階で ddl を再バインドしようとしましたが、ユーザーが選択したアイテムを取得してテーブルを更新する方法がわからないため、そのサイクルをまだ十分に理解していません。

また、ddl に SqlDataSource SelectCommand を入力しようとしましたが、現在リンクされているレコードの ID を他のデータベースに含めることはできませんでした (「my」テーブルで使用可能であり、GridView DataKey として設定して追加しますSqlDataSource の SelectParameters の ControlParameter としてそれを ddl 項目リストに現在リンクされているレコードがないと、既存のリンクを保持できません。

今のところコード サンプルの送信は保留します。このメッセージはすでに長すぎます。-- 私が説明したことから解決策が明らかであることを願って... 私の目的が奇妙だとは思いませんが、そうでなければ説得されることは受け入れます。

よろしくお願いします!

クリス

4

1 に答える 1

0

わかりました、私が提案しようとしていることをすでに行っているかもしれないので、コードの詳細には立ち入りません。

最後の列であるドロップダウン リストでは、SQL ステートメントを実行して、リンクされていないアイテムを取得する必要があります。「WHERE xx NOT IN」を使用します。「未割り当て」オプションの場合は、上記と同じコード スコープ内のリストにアイテムを追加するだけです。

次の手順では、GridView の編集イベントを手動で処理します。挿入、更新、および削除。

そうすれば問題ないと思います。

于 2011-01-24T15:08:53.127 に答える