2008-11-18 3 views

ответ

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