2008-11-18 4 views

Répondre

0

Vous ne pouvez pas accéder DragHandleTemplate programatically sur le serveur, mais si vous créez les éléments environnants avec de l'identifiant unique (par la suite), vous devriez pouvoir les sélecteurs CSS-utilisation ou Javascript pour changer seulement quelques-uns des éléments.

1

Malheureusement, il n'y a aucun moyen d'obtenir un support de drag à partir de ReorderListItem. Au lieu de cela, vous pouvez créer un contrôle serveur à l'intérieur DragHandleTemplate (par exemple PlaceHolder), puis trouver dans votre gestionnaire d'événements ItemDataBound:

Dans le fichier ASPX:

<DragHandleTemplate> 
    <div class="dragHandle"> 
    <asp:Label ID="lblDragHandle" runat="server" /> 
    </div> 
</DragHandleTemplate> 

Dans le fichier 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; 
} 

J'ai copié la méthode FindControlRecursive du blog de Jeff.

1

Vous pouvez également exprimer FindControlRecursive dans 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); 
     }