0

有没有办法以编程方式访问 ReorderList 的 DragHandleTemplate(ASP.NET AJAX 控件工具包)......特别是在 ReorderList 的 ItemDataBound 期间,以便在每个项目级别更改其外观?

4

3 回答 3

1

您还可以在 LINQ 中表达 FindControlRecursive:

        private Control FindControlRecursive(Control root, string id)
        {
            return root.ID == id
                       ? root
                       : (root.Controls.Cast<Control>().Select(c => FindControlRecursive(c, id)))
                             .FirstOrDefault(t => t != null);
        }
于 2011-04-29T17:40:01.673 回答
1

不幸的是,没有办法从 ReorderListItem 获取拖拽器。相反,您可以在 DragHandleTemplate(例如 PlaceHolder)中创建一个服务器控件,然后在您的 ItemDataBound 事件处理程序中找到它:

在 aspx 文件中:

<DragHandleTemplate>
  <div class="dragHandle">
    <asp:Label ID="lblDragHandle" runat="server" />
  </div>
</DragHandleTemplate>

在 aspx.cs 文件中:

protected void ReorderList1_ItemDataBound(object sender, AjaxControlToolkit.ReorderListItemEventArgs e)
{
   Label lblDragHandle = (Label)FindControlRecursive(e.Item, "lblDragHandle");
   lblDragHandle.Text = e.Item.ItemIndex.ToString();
}

private Control FindControlRecursive(Control root, string id)
{
   if (root.ID == id)
   {
      return root;
   }

   foreach (Control c in root.Controls)
   {
      Control t = FindControlRecursive(c, id);
      if (t != null)
      {
         return t;
      }
   }

   return null;
}

我从 Jeff 的博客中复制了FindControlRecursive方法。

于 2009-02-02T10:12:51.857 回答
0

您不能在服务器上以编程方式访问 DragHandleTemplate ,但如果您创建具有唯一 ID(每行)的周围元素,您应该能够使用 CSS 选择器或 Javascript 仅更改某些项目。

于 2009-01-29T15:33:59.650 回答