有没有办法以编程方式访问ReorderList(ASP.NET AJAX控件工具包)的DragHandleTemplate ...特别是在ReorderList的ItemDataBound期间,为了在每个项目级别更改其外观?
答案 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仅更改某些这些物品。