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.
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);
}
}
'vals.Add (neu KeyValuePair (0 Punkt));' Sie immer gesetzt das Schlüsselpaar als (0, etwas)? –
Raskayu
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
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