在ASP.NET AJAX ReorderList中对DragHandleTemplate的编程访问

时间:2008-11-18 17:15:20

标签: asp.net ajaxcontroltoolkit reorderlist

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

3 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:1)

您还可以在LINQ中表达FindControl Recursive:

        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);
        }

答案 2 :(得分:0)

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