2016-08-05 10 views
-1

spezifische Problem I KeyValue Pair aktualisieren möchten löschen, wenn ich etwas löschen, sollte es Elemente gelöscht werden und für verbleibende gespeichert wird, aber wenn ich lösche einen Schlüssel, jeder Wert wird gelöscht. Ich möchte nur einen bestimmten Wert löschen und die restlichen Werte beibehalten und speichern.wie Hinzufügen, Aktualisieren, Speichern und Key List <KeyValuePair <int, string>> in C#

Bearbeitet: Offensichtlich, wenn ich einen Schlüssel lösche, wird jeder Wert gelöscht, ich möchte einen bestimmten Wert aus dem Schlüssel löschen und die restlichen Werte vom Schlüssel behalten.

Hinweis: Wenn meine Frage falsch ist, können Sie Änderungen vorschlagen.

Der Hintergrund:

1. ComboBox hat eine Kategorie und 2. comboBox hat Kategorie B., wenn ich der Kategorie A auswählen, ich einige Serien erzeugen und gleichzeitig die ich hinzufügen, für die Anzeige zu ComboBox2 und fügen zu Schlüsselwertpaar.

gleiche mit Kategorie B.

, wenn ich die Kategorie A auswählen, ich will nur dann erzeugen Serien in der Kategorie A sehen, und wenn ich die Kategorie B wählen, ich will nur dann erzeugen Serien in der Kategorie B sehen

Deshalb verwende ich KeyValuePair, ich konnte keine andere bessere Lösung finden, ich speichere die Datei mit json und wenn ich die Anwendung lade, lade ich die Datei neu und befülle meine ComboBoxen mit den Daten neu.

jetzt möchte ich eine bestimmte serielle verwenden, wenn die serielle verwendet wird, ich möchte es aus der ComboBox entfernen und auch aus dem Schlüsselwertpaar entfernen und vorhandene Daten speichern.

hier ist das Bild, um es besser zu verstehen. Products Serial Generator

Globale Variablen:

List<KeyValuePair<int, string>> vals = new List<KeyValuePair<int, string>>(); 
    int from; 
    int to; 
    int result; 

Es folgt der Code-Liste hinzuzufügen.

Zu ComboBox hinzufügen und zum Schlüsselwertpaar hinzufügen.

for (int i = 0; i <= result; i++) 
    { 
     string item = Convert.ToString(from + i); 
     comboBox1.Items.Add(item); 
     vals.Add(new KeyValuePair<int, string>(0, item)); 
    } 

speichern Code:

string json = JsonConvert.SerializeObject(vals); 
     using (StreamWriter sw = File.CreateText("C:\\Dictionary.txt")) 
     { 
      sw.Write(json); 
     } 

repopulating comboBox

string jsonToRead = File.ReadAllText("c:\\Dictionary.txt"); 

     List<KeyValuePair<int, string>> myDictionaryReconstructed = 
      JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(jsonToRead); 

     if (comboBox1.SelectedIndex == 0) 
     { 
      comboBox2.Items.Clear(); 
      foreach (var item in myDictionaryReconstructed) 
      { 
       if (item.Key == 0) //If Key value is 0, if it is CategoryA 
       { 
        comboBox2.Items.Add(item.Value); 
        comboBox2.Refresh(); 
       } 
      } 

Wie Key & Speichern zurück restlichen Daten löschen

// Dies ist wahrscheinlich die falsche Art, es zu tun. // Ich will diesen Wert löschen, die

private void DeleteButton_Click(object sender, EventArgs e) 
    { 
    // Deserialise it from Disk back to a Dictionary 
     string jsonToRead = File.ReadAllText("c:\\Dictionary.txt"); 

     List<KeyValuePair<int, string>> myDictionaryReconstructed = 
      JsonConvert.DeserializeObject<List<KeyValuePair<int, string>>>(jsonToRead); 

     foreach (var item in myDictionaryReconstructed) 
     { 
      if (item.Key == 0) //If Key value is 0, if it is CategoryA 
      { 
       if (item.Value == this.comboBox1.SelectedValue.ToString()) 
       { 
        vals.Remove(new KeyValuePair<int, string>(0, comboBox1.SelectedValue.ToString())); 
       } 
      } 

     } 

     string json = JsonConvert.SerializeObject(myDictionaryReconstructed); 
     using (StreamWriter sw = File.CreateText("C:\\Dictionary.txt")) 
     { 
      sw.Write(json); 
     } 


    } 
+0

'vals.Add (neu KeyValuePair (0 Punkt));' Sie immer gesetzt das Schlüsselpaar als (0, etwas)? – Raskayu

+0

Für Kategorie A verwende ich 0 und für Kategorie B verwende ich 1. 'vals.Remove (new KeyValuePair (0, comboBox2.SelectedItem.ToString()));' mit diesem löscht stattdessen den gesamten Schlüssel von nur Wert. – Patrick

+0

Probieren Sie 'IndexOf()', um zu bekommen, wo das Element ist und 'RemoveAt()' von Vals, so dass Sie das Löschen nur eines für sicher – Raskayu

Antwort

1

in ComboBox2 ausgewählt Ich denke, es ist etwas mit der foreach-Schleife verwendet, die ich schien eher unnötig.

Könnten Sie bitte versuchen Sie foreach-Block in

DeleteButton_Click 

Ereignis zu entfernen und ersetzen Sie es mit

vals.Remove(new KeyValuePair<int, string>(0, comboBox1.SelectedItem.ToString())); 
Verwandte Themen