0

我可能会遗漏一些微不足道的东西,所以请耐心等待。

我有两个 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>

用户选择要从源移动到目标的字段,当用户保存表单时,所选项目的值将保存到数据库中。下次用户加载表单时,需要显示选择。为此,我编写了以下代码来将项目从源传输到后端的目标。

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() 时,从后面的代码中实现“移动”行为的更简洁的方法是什么?

4

1 回答 1

0

显然,Page_Load 对于从源中删除的项目来说为时过早(有趣的是,这些项目最终会显示在目标中!)。

将代码移至 Pre_Render 并且一切正常。不是那么琐碎!

于 2013-12-07T21:17:13.770 回答