2013-04-28 15 views
8

Ich habe eine Liste, die eine Reihe von Transaktionsobjekten enthält. Was ich versuche, diese Transaktionsobjekte in einem Datagridview-Steuerelement beim Laden eines Formulars anzuzeigen, sollte im Grunde die Datagridview etwas eines Transaktionsregisters darstellen, um die Daten für jedes der Transaktionsobjekte in der Liste anzuzeigen.Auffüllen von Datagridview mit Liste von Objekten

Ich muss zugeben, ein Mangel an Erfahrung, wenn es um die Verwendung von Datagridviews geht und ich habe einige Schwierigkeiten mit dem Verständnis, was ich hier tun muss.

Meine Frage ist, wie gehe ich dazu, die Details jedes der Objekte in der Liste zu erhalten, um in der Datagridview anzuzeigen?

Hier ist mein Code.

Zuerst wird die Transaktionsklasse:

public class Transaction 
{ 
    // Class properties 
    private decimal amount; 
    private string type; 
    private decimal balance; 
    private string date; 
    private string transNum; 
    private string description; 

    // Constructor to create transaction object with values set. 
    public Transaction(decimal amount, string type, decimal currBal, string date, string num, string descrip) 
    { 
     this.amount = amount; 
     this.type = type; 
     this.balance = currBal; 
     this.date = date; 
     this.transNum = num; 
     this.description = descrip; 
    } 

    // Get and Set accessors to allow manipulation of values. 
    public decimal Amount 
    { 
     get 
     { 
      return amount; 
     } 
     set 
     { 
      amount = value; 
     } 
    } 
    public string Type 
    { 
     get 
     { 
      return type; 
     } 
     set 
     { 
      type = value; 
     } 
    } 
    public decimal Balance 
    { 
     get 
     { 
      return balance; 
     } 
     set 
     { 
      balance = value; 
     } 
    } 
    public string Date 
    { 
     get 
     { 
      return date; 
     } 
     set 
     { 
      date = value; 
     } 
    } 
    public string TransNum 
    { 
     get 
     { 
      return transNum; 
     } 
     set 
     { 
      transNum = value; 
     } 
    } 
    public string Description 
    { 
     get 
     { 
      return description; 
     } 
     set 
     { 
      description = value; 
     } 
    } 

    public decimal addCredit(decimal balance, decimal credit) 
    { 
     decimal newBalance; 
     newBalance = balance + credit; 
     return newBalance; 
    } 

    public decimal subtractDebit(decimal balance, decimal debit) 
    { 
     decimal newBalance; 
     newBalance = balance - debit; 
     return newBalance; 
    } 
    } 
} 

Jetzt ist der Code für die "Register" Form:

public partial class Register : Form 
{ 
    List<Transaction> tranList = new List<Transaction>(); 

    public Register(List<Transaction> List) 
    { 
     InitializeComponent(); 
     this.tranList = List; 
    } 

    private void Register_Load(object sender, System.EventArgs e) 
    { 
     //regView represents the Datagridview that I'm trying to work with 
     regView.AutoSize = true; 
     regView.DataSource = tranList; 
     regView.Rows.Add(tranList[0]); 
    } 
} 

Und hier ist der Ausgang I erhalten. Register output

Antwort

9

Es gibt wirklich zwei hohe Ansätze.

1) Fügen Sie die manuell erstellten Zeilen direkt zum DataGridView hinzu. In diesem Fall müssen Sie sie manuell aktualisieren/entfernen, wenn sich die Dinge ändern. Dieser Ansatz ist "ok", wenn Sie den Inhalt des Displays nach der Initialisierung nicht ändern/ändern wollen. Es wird unhaltbar, wenn Sie es tun.

Um es direkt hinzuzufügen, müssen Sie ein DataGridViewRow erstellen und es mit den einzelnen Werten auffüllen, und fügen Sie das DataGridViewRow zu dem DataGridView.Rows hinzu.

2) Daten binden den DGV. Es gibt viele Artikel über Datenbindung an eine DataGridView. In einigen Fällen ist es einfacher, Ihre Daten einfach zu einer DataTable hinzuzufügen, und dann extrahieren Sie eine DataView daraus und binden Sie die DataGridView an die DataView. Andere Leute finden es einfacher, direkt an eine Sammlung zu binden.

CodeProject hat einen anständigen Artikel, mit dem Sie diesen Weg beginnen können, aber eine schnelle Google-Suche wird viele andere Artikel ergeben.

http://www.codeproject.com/Articles/24656/A-Detailed-Data-Binding-Tutorial

+0

ich die Datenbindung hatte angesehen, da sie die am wenigsten kludgy Lösung zu sein scheint, da es für alle Änderungen an den Datenkonten Quelle. Edit: Ich drücke Enter zu schnell. Ich habe versucht zu sagen, dass ich mir über die Datenbindung nicht ganz sicher bin, da ich es vorher nicht wirklich gemacht habe. Ich schaue mir den Link an, danke. – morris295

+0

Es ist anfangs etwas kompliziert, wenn man es nicht kennt, aber es wird einfacher mit Zeit und Übung (obwohl es immer noch viele frustrierende Momente bieten kann). Die oben beschriebene Situation scheint ein einfaches Beispiel zu sein, um damit anzufangen, also viel Glück. Fühlen Sie sich frei, mit spezifischeren Fragen zurückzukommen, wenn Sie auf sie stoßen. – Gjeltema

+0

Ich endete mit Datenbindung, danke für die Anleitung, die es sehr hilfreich war. Du hast mir eine Menge Leid dabei erspart. – morris295

4

Verwendung als DGV:

DataGridView groupListDataGridView; 

Säule:

DataGridViewTextBoxColumn groupListNameColumn; 

Spalte Setup so sein sollte:

groupListNameColumn.DataPropertyName = "name"; 

Verwenden Sie diese Eigenschaft, sonst werden alle Spalten hinzugefügt.

groupListDataGridView.AutoGenerateColumns = false; 

bevölkern wie folgt aus:

private void populateGroupList() { 
    groupListDataGridView.DataSource = null; 
    formattedGroupList = new SortableBindingList<DataGridGroupObject>(); 
    foreach (GroupObject go in StartUp.GroupList) { 
     DataGridGroupObject dggo = new DataGridGroupObject(); 
     dggo.id = go.Id; 
     dggo.name = go.Name; 
     formattedGroupList.Add(dggo); 
    } 
    groupListDataGridView.DataSource = formattedGroupList; 
    groupListDataGridView.Invalidate(); 
} 

und Modell:

public class DataGridGroupObject 
{ 
    public int id { get; set; }  //this will be match id column 
    public string name { get; set; } // this will be match name column 
} 
+1

Was ist SortierbarBindingList <>()? – Danon

Verwandte Themen