2010-08-23 9 views
0

J'utilise une zone de liste asp.net. J'ai deux boutons un pour ajouter des articles à la liste et un autre pour enlever. J'utilise la fonction javascript pour supprimer des éléments de la liste. Lorsque j'ajoute à la liste après la suppression. Les éléments supprimés sont également ajoutés.manipulations de zone de liste

<asp:ListBox ID="sLstbox" runat="server" Width="250px" Height="150px" TabIndex="10"></asp:ListBox> 

<asp:LinkButton ID="sLbtnAdd" runat="server" ></asp:LinkButton>&nbsp; 
<a href="#" id="hAncRemove" runat="server" onclick="fncRemoveItems();">Remove</a>  

function fncRemoveItems() 
{ 
    var i; 
    var strIDs=""; 
    var items = document.getElementById("sLstbox"); 
    alert(items.options.length); 
    for (i = items.options.length - 1; i >= 0; i--) 
    { 
     if (items.options[i].selected) 
      items.remove(i); 
    } 
} 

IN Code

Protected Sub sLbtnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles sLbtnAdd.Click 

    Dim li As New ListItem 
    li.Value = "1" 
    li.Text = "test" 
    sLstbox.Items.Add(li) 
End Sub 

Répondre

0

Vous devez utiliser < normal Sélectionnez> boîtes dans ce cas. Asp: les listboxes sont destinées à être manipulées côté serveur et vous devez les contourner pour les faire fonctionner comme vous le souhaitez.

Avec les boîtes de sélection normales (serveur runat ou non), il devrait être assez simple.

0

Si vous voulez vous simplifier la vie et vous donner l'effet 'AJAX', mettez tout simplement dans un UpdatePanel et faites-le côté serveur. Si vous voulez utiliser un asp:ListBox, le manipuler via javascript va faire mal.

Voici un exemple de travail avec le code ASPX et la mise en œuvre de codebehind pour votre scénario:

<asp:UpdatePanel ID="yourUpdatePanel" runat="server"> 
    <ContentTemplate> 
     <asp:ListBox ID="sLstbox" runat="server" Width="250px" Height="150px" TabIndex="10"></asp:ListBox> 
     <asp:LinkButton ID="sLbtnAdd" runat="server" OnClick="sLbtnAdd_Click" ></asp:LinkButton>&nbsp; 
     <asp:LinkButton ID="sLbtnRemove" runat="server" OnClick="sLbtnRemove_Click"></asp:LinkButton>&nbsp;   
    </ContentTemplate> 
</asp:UpdatePanel>  

Dans votre behind:

Protected Sub sLbtnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles sLbtnAdd.Click    
    Dim li As New ListItem  
    li.Value = "1"  
    li.Text = "test"  
    sLstbox.Items.Add(li)  
End Sub 

Protected Sub sLbtnRemove_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles sLbtnAdd.Click    
    For i As Integer = sLstbox.Items.Count - 1 To 0 Step -1 
     If sLstbox.Items(i).Selected Then 
      sLstbox.Items.Remove(sLstbox.Items(i)) 
     End If 
    Next 
End Sub 
+0

Aaah, êtes-vous sûr? Une nouvelle demande de suppression d'un élément de votre liste? –

+0

@Chris van de Steeg J'essayais de lui donner la solution la plus simple comme alternative à votre réponse. Le coût d'une nouvelle demande dans son cas pourrait même ne pas être mesurable par rapport au coût de mise en œuvre d'une solution de copier-coller. OP devra peser ses options puisque aucun de nous ne connaît la portée/l'environnement. – Kelsey

+0

Je fais la suppression du côté serveur et permet aux publications de se produire actuellement. – skamale