Hi,
bin relativ neu in der C# Welt (Vorab :tongue🙂
Ich habs leider nicht ganz raus, wie ich meine Listview mit Daten aus einer eigenen Klasse füllen kann.
Und das möglichst dynamisch.
Die Columns der Listview setze ich bereits dynamisch:
private bool listViewInit(ref ListView ls)
{
ls.View = View.Details;
UBSPMVorgang ubsV = new UBSPMVorgang();
Type t = ubsV.GetType();
PropertyInfo[] pi = t.GetProperties();
foreach (PropertyInfo prop in pi)
{
ls.Columns.Add(prop.Name,100);
}
return true;
}
Die Klasse hat nur einfache variablen deklariert, die ich gerne an das Listview Objekt übergeben möchte.
private bool listViewFill(UBSPMVorgangHeaderObject ubsData, ref ListView ls)
{
ls.Items.Clear();
foreach (var ubsItem in ubsData.data)
//ubsItem = UBSPMVorgang
{
System.Diagnostics.Debugger.Break();
// *** Hier ist mein Problem
ls.Items.Add(new ListViewItem(ubsItem.ToString()));
// *** Hier ist mein Problem
}
System.Diagnostics.Debugger.Break();
return true;
}
public class UBSPMVorgang
{
public string id { get; set; }
public string dateAdded { get; set; }
public string createdBy { get; set; }
public string nn1 { get; set; }
public string nn2 { get; set; }
}
Wie kriege ich jetzt
ls.Items.Add(new ListViewItem(ubsItem.ToString()));
die Klassendaten in die Listview (Dynamisch, also ohne die einzelnen variablen anzusprechen)
Für eure Hilfe schon vorab thx
Reflection ist vermutlich die umständlichste aller Möglichkeiten.
Mit ls.Items.Add(new ListViewItem(ubsItem.ToString()));
übergibst Du dem ListView nur ein String des Klassennamens, ohne Inhalte.
Du musst schon die Werte aus der Klasse in das ListViewItem übertragen. Wenn Du nicht weisst wie das funktioniert: ein Blick in die Doku genügt; dort ist nicht nur ein Beispiel...
Aber was ist denn der genaue Wunsch?
Willst Du jede Art von Klasse in einem Grid/ListView darstellen; oder hast Du konkrete Vorstellungen?
Natürlich könnte man das via Generic (Generisch, nicht Reflection) lösen; aber ich finde es ist schneller und einfacher kurz die ListView zusammen zu setzen, als sich mit einer 80% generischen Lösung zu beschäftigen.
PS: Statt System.Diagnostics.Debugger.Break(); -> [Artikel] Debugger: Wie verwende ich den von Visual Studio?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hi,
danke für deine Antwort und danke für den Tipp mit dem Debugger.
Ich habe schon eine genaue Vorstellung.
Ich habe halt mehrere Klassen und will nicht für jede Klasse eine eigene Listview erstellen bzw. die Felder Hard codieren.
Du musst schon die Werte aus der Klasse in das ListViewItem übertragen
--> Genau das war meine Frage. Ob es hierzu einen generischen Ansatz gibt.
ein Blick in die Doku genügt; dort ist nicht nur ein Beispiel...
--> Welche Doku?
Bitte beachte [Hinweis] Wie poste ich richtig?
Keine Full Quotes!
Ich habe halt mehrere Klassen und will nicht für jede Klasse eine eigene Listview erstellen bzw. die Felder Hard codieren.
Das ist unüblich. I.d.R. definiert man eine ListView im Code.
Man will ja i.d.R. nicht alle Eigenschaft eines Objekts auch wirklich sichtbar haben; oder man möchte eine andere Ausrichtung, Breite der Spalten, Formatierung etc...
Willst Du das tatsächlich alles dynamisch anhand der Properties haben, dann wirst Du doch Reflection benötigen, weil Du ansonsten weder an Typ noch an Name der Eigenschaft kommst.
Das musst Du aber selbst ausprogrammieren; das kann WinForms nicht von Haus aus.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ok verstehe.
Dank für die Info.
Wie baue ich mir denn das Item dynamisch jetzt auf? Einen Tipp für mich?
Als erstes weise ich Dich erneut auf [Hinweis] Wie poste ich richtig? hin: bitte keine Full Quotes!
Wie Du es dynamisch aufbaust?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Muß es denn unbedingt eine ListView sein? Denn mit dem DataGridView und dessen Binding bist du viel flexibler, s.a. Vergleich DatagridView - ListView.
Oh - das ist ein ziemlich gutes Control - da brauchste nur der DataSource eine BindingSource zuweisen, und wenn alles richtig konfiguriert ist, ist damit die ListView befüllt.
Gibt doch auch ein umfangreiches DemoProjekt zu dem Control - gibt das denn garnix her für deine Problematik?
Der frühe Apfel fängt den Wurm.
gibt das denn garnix her für deine Problematik?
Doch, das ist genau was ich brauch. Dachte mir nur, dass es vielleicht auch andere interessieren könnte, die das hier lesen.