Есть ли способ для программного доступа к DragHandleTemplate из ReorderList (ASP.NET AJAX Control Toolkit) ... В частности, во время ItemDataBound для ReorderList, чтобы изменить его внешний вид на на уровне позиции?Программный доступ к DragHandleTemplate в ASP.NET AJAX ReorderList
0
A
ответ
0
Вы не можете получить доступ к DragHandleTemplate программно на сервере, но если вы создаете окружающие элементы с (в строке) уникальный идентификатор Вам необходимо иметь на использование CSS-селекторов или Javascript, чтобы изменить только некоторые из пунктов.
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;
}
Я скопировал FindControlRecursive метод из блога Джеффа.
1
Вы также можете выразить FindControlRecursive в 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);
}