3

这就是我启动 ASP:Repeater 的方式:

var taskItemsList = new List<Task>(); 

taskItemsList = GenerateActiveList(); //generates 6 items
_taskItemsListSorted = from Task in taskItemsList
                       orderby Task.AssignedTo ascending , Task.DueDateTicks ascending
                       select Task;
taskRepeater.DataSource = _taskItemsListSorted;
taskRepeater.DataBind();

这就是我尝试让同一个中继器显示不同列表的方式(当用户单击按钮时,此代码运行):

taskRepeater.DataSource = null; taskRepeater.DataBind();

var taskItemsList = new List<Task>(); 

taskItemsList = GenerateInactiveList(); //generates 5 items
_taskItemsListSorted = from Task in taskItemsList
                       orderby Task.AssignedTo ascending , Task.DueDateTicks ascending
                       select Task;
taskRepeater.DataSource = _taskItemsListSorted;
taskRepeater.DataBind();

(请注意,在第二个代码部分中,使用了一个新函数来生成不同的列表。)

问题是Repeater 控件似乎仍然包含第一个代码部分中的项目。

第 2 节中的最后一个操作 taskRepeater.DataBind(); 使 ItemDataBound 函数触发 11 次,这表明最初生成的列表项仍以某种方式包含在转发器中。

关于我哪里出错的任何想法?

4

2 回答 2

6

您遇到的唯一问题是 OnClick 事件正在启动,执行您想做的事情,但之后页面 OnLoad 正在启动并将内容替换为原始页面。要解决这个问题,只需在 OnLoad 页面上执行此操作:

if (!IsPostBack)
    // Bind the repeater
于 2013-03-22T11:26:06.463 回答
1

在调用第 2 节代码之前,只需执行此操作,

    DataTable dt = new DataTable();
    taskRepeater.DataSource = dt;
    taskRepeater.DataBind();
于 2013-03-22T10:28:23.880 回答