2017-04-22 2 views
0

Ich füge ein Element aus einem Formular zu einem Listenansicht in einem anderen Formular hinzu und möchte jedes Element in dem Listview in einer JSON-Datei speichern. Ich kann mir nicht vorstellen, wie ich das machen soll und habe an mehreren Stellen nachgesehen, aber es scheint nicht so, als würden die Leute die gleiche Methode benutzen, oder ich mache alles falsch.So erhalten Sie Daten von ListViewItem; WinForms, C#

Hier ist der Code, den ich verwende, um das Element der Listview hinzuzufügen, wie kann ich auf jedes Datenelement in jedem ListViewItem zugreifen, um alles in einer JSON-Datei speichern zu können?

ListView lv = (ListView)lf.Controls["mainListView"]; 
     ListViewItem lvi = new ListViewItem(); 
     lvi.Text = Data.Name; 
     lvi.Tag = Data; 
      switch (Data.Type) 
      { 
       case "Anime": 
        lvi.ImageIndex = 0; 
        break; 
       case "Book": 
        lvi.ImageIndex = 1; 
        break; 
       case "Comic": 
        lvi.ImageIndex = 2; 
        break; 
       case "Game": 
        lvi.ImageIndex = 3; 
        break; 
       case "Manga": 
        lvi.ImageIndex = 4; 
        break; 
       case "Movie": 
        lvi.ImageIndex = 5; 
        break; 
       case "Other": 
        lvi.ImageIndex = 6; 
        break; 
       case "TV": 
        lvi.ImageIndex = 7; 
        break; 
      } 
     lv.Items.Add(lvi); 

Und hier ist die Information für die Values-Klasse, die in diesem Formular "Data" genannt wird.

public Values Data 
    { 
     get 
     { 
      Values v = new Values(); 
      v.Name = itemNameTxt.Text; 
      v.Type = itemTypeCmb.Text; 
      v.TypeName = typeNameTxt.Text; 
      v.Status = statusCmb.Text; 
      v.Completed = completedNUD.Value; 
      v.URL = imageUrlTxt.Text; 
      v.RateOne = rating1.Checked; 
      v.RateTwo = rating2.Checked; 
      v.RateThree = rating3.Checked; 
      v.RateFour = rating4.Checked; 
      v.RateFive = rating5.Checked; 

      return v; 
     } 
     set 
     { 
      itemNameTxt.Text = value.Name; 
      itemTypeCmb.Text = value.Type; 
      typeNameTxt.Text = value.TypeName; 
      statusCmb.Text = value.Status; 
      completedNUD.Value = value.Completed; 
      imageUrlTxt.Text = value.URL; 
      rating1.Checked = value.RateOne; 
      rating2.Checked = value.RateTwo; 
      rating3.Checked = value.RateThree; 
      rating4.Checked = value.RateFour; 
      rating5.Checked = value.RateFive; 
     } 
    } 

Antwort

1

Es scheint, dass Sie die Values Klasse Instanz Speicherung der ListViewItem innerhalb der Tag Eigenschaft zum Auffüllen verwendet:

lvi.Tag = Data; 

So können Sie es von dort zu extrahieren, wenn nötig. Zum Beispiel:

ListView lv = ...; 
var valueList = lv.Items.Cast<ListViewItem>() 
    .Select(lvi => (Values)lvi.Tag) 
    .ToList(); 
+0

landete ich eine Menge meines Code redoing und eine ideale Lösung zu finden, aber ich tat dies zunächst versuchen, und es funktionierte, also wird ich sagen, dass dies eine richtige Antwort auf meinen ursprünglichen Code des Problem. Vielen Dank! – Kankuro

Verwandte Themen