2008-11-18 52 views

回答

0

您不能访问DragHandleTemplate编程服务器上,但如果你创建一个唯一的ID(每行)周围的元素,你应该能够使用CSS选择器或Javascript只改变一些项目。

1

不幸的是,没有办法从ReorderListItem获取拖拽持有者。相反,你可以创建内部DragHandleTemplate服务器控件(如占位符),然后发现它在你的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

您还可以在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); 
     }