2017-09-11 1 views
0

J'ai créé une méthode DeleteSlectedItemListBox ci-dessous qui a un code qui a supprimé un élément sélectionné dans la zone de liste lorsque le bouton Supprimer a été cliqué. Cependant, cela ne semble pas fonctionner.Comment supprimer l'élément sélectionné d'une liste

Le code doit également supprimer le contenu de la zone de liste dans le fichier texte. Comment est-ce que je fais cela?

private void DeleteSelectedItemListBox() 
{ 
    DataTable dt = new DataTable(); 
    string FileName = (@"C: \Users\StanleyM\Desktop\PhoneBook\PhoneBook\bin\Debug\Personal.text"); 
    StreamReader streamReader = new StreamReader(FileName); 
    string line = ""; 
    int Counter = -1; 

    while ((line = streamReader.ReadLine()) != null) 
    { 
     foreach (var item in line) 
     { 
      if (item.ToString() == SelectedItem.ToString()) 
      { 
       Counter--; 
       dt.Clear(); 
       ListBox.Remove(line); 
      }   
     }  
    } 
} 

Répondre

0

Si vous utilisez le motif MVVM vous pouvez lier à XAML élément sélectionné et votre liste comme ObservableCollention. <ListBox ItemsSource="{Binding YourList}" SelectedItems="{Binding YourSelectedItem}"></ListBox> Ensuite, dans votre méthode de suppression, vous pouvez essayer:

private void DeleteSelectedItemListBox() 
{  
    var deletingNumber = YourList.IndexOf(YourSelectedItem); 
    var allLines = File.ReadAllLines(path).ToList(); 
    allLines.RemoveAt(deletingNumber); 
    File.WriteAllLines(path,allLines.ToArray()); 
} 
+0

Merci Giltanas, –

+0

Je reçois l'erreur suivante lorsque je clique sur le bouton supprimé System.IO.IOException: 'Le processus ne peut pas accéder au fichier' C: \ Users \ StanleyM \ Desktop \ PhoneBook \ PhoneBook \ bin \ Debug \ Personal.text 'car il est utilisé par un autre processus.' –

+0

Cela pourrait fonctionner. Peut-être votre fichier est ouvert à partir d'un autre endroit et non fermé, ou vous l'avez ouvert avec un autre programme – Giltanas

0
while (listBox1.SelectedItems.Count > 0) 
    { 
    var index = listBox1.Items.IndexOf(listBox1.SelectedItem); 
    listBox1.Items.RemoveAt(index); 
    RemoveTextLine(index); 
    } 

private void RemoveTextLine(int index){ 

    using(var sr = new StreamReader("C:\Users\StanleyM\Desktop\PhoneBook\PhoneBook\bin\Debug\Personal.text")) 
    using(var sw = new StreamWriter("C:\Users\StanleyM\Desktop\PhoneBook\PhoneBook\bin\Debug\temp.text")) 
    { 
    int line=0; 
    while((sr.ReadLine()) != null) 
    { 
     if(line != index) 
     sw.WriteLine(line); 
     line ++; 
    } 
} 

    File.Delete("Personal.txt"); 
    File.Move(tempFile, "Personal.txt"); 
} 

Essayez cette

+0

Merci Shiwanka, Le premier Bien que ce soit pas dans la méthode est-il supposé être dans une autre méthode? et d'où vient le tempFile, car j'obtiens une erreur pour ça aussi bien que l'index dans mon ViewModel? –

+0

déclarer un certain fichier temporaire pah et le remplacer par cela, je l'ai déjà fait dans le code. –

+0

d'abord tout en remplacer sur le code tandis que –