0

些細なことを見逃しているかもしれないので、ここで我慢してください。

ソースと宛先の 2 つの RadListBox があります。

<telerik:RadListBox runat="server" ID="rdlbDisplayColumnsSource" AllowTransfer="true"
TransferMode="Move" TransferToID="rdlbDisplayColumnsDest" CssClass="rdlbDisplayColumns">
    <Items></Items>
</telerik:RadListBox>
<telerik:RadListBox runat="server" ID="rdlbDisplayColumnsDest" CssClass="rdlbDisplayColumns"
AllowReorder="true">
    <Items></Items>
</telerik:RadListBox>

ユーザーはソースから宛先に移動するフィールドを選択し、ユーザーがフォームを保存すると、選択した項目の値が DB に永続化されます。次にユーザーがフォームをロードしたときに、選択内容を表示する必要があります。そのために、次のコードを作成して、アイテムをソースからバックエンドの宛先に転送しました。

var displayCols = _Model.AdditionalDisplayColumns.Split(',');
foreach (var val in displayCols)
{
    var item = rdlbDisplayColumnsSource.FindItemByValue(val);
    rdlbDisplayColumnsSource.Transfer(item, rdlbDisplayColumnsSource, rdlbDisplayColumnsDest);
}

TransferMode が Move に設定されているため、転送されるアイテムが Source ListBox から削除されることを期待していましたが、そうではありませんでした。宛先 ListBox は以前に選択された項目で更新されましたが、それらの項目はまだソースに存在していました!

転送後にソース ListBox で選択したアイテムを削除しようとすると、アイテムがリストボックスに存在しないという例外がスローされます。

.Transfer() の呼び出し中にコード ビハインドから「Move」動作を実現するよりクリーンな方法は何ですか?

4

1 に答える 1

0

どうやら、Page_Load はアイテムがソースから削除されるには時期尚早です (ただし、アイテムが最終的に宛先に表示されるのはおかしいです!)。

コードを Pre_Render に移動すると、うまくいきました。それほど些細なことではありません!

于 2013-12-07T21:17:13.770 に答える