Есть ли способ программно получить доступ к DragHandleTemplate из ReorderList (ASP.NET AJAX Control Toolkit) ... В частности, во время ItemDataBound для ReorderList, чтобы изменить его внешний вид на уровне каждого элемента?





Вы не можете получить доступ к DragHandleTemplate программно на сервере, но если вы создаете окружающие элементы с уникальными идентификаторами (для каждой строки), вы должны иметь возможность использовать CSS-селекторы или Javascript только для изменения некоторых элементов.
К сожалению, получить держатель перетаскивания из 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;
}
Я скопировал метод FindControlRecursive из блога Джеффа.
Вы также можете выразить FindControl Recursive в LINQ:
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);
}