2013-04-28 12 views
8

Ho una lista che contiene una serie di oggetti di transazione. Quello che sto cercando di fare è visualizzare questi oggetti di transazione in un controllo Datagridview sul caricamento di un modulo, in pratica Datagridview dovrebbe rappresentare qualcosa di un registro delle transazioni per visualizzare i dati per ciascuno degli oggetti di transazione nell'elenco.popolamento datagridview con elenco di oggetti

Devo ammettere una mancanza di esperienza quando si tratta di utilizzare DatagridView e ho qualche difficoltà a capire cosa devo fare qui.

La mia domanda è: come posso ottenere i dettagli di ciascuno degli oggetti nell'elenco da visualizzare in Datagridview?

Ecco il mio codice.

prima classe di transazione:

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; 
    } 
    } 
} 

Ora il codice per il modulo "Registra":

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]); 
    } 
} 

Ed ecco l'output che ottengo. Register output

risposta

9

Ci sono davvero due approcci di alto livello a questo.

1) Aggiungere le righe create manualmente direttamente a DataGridView. In questo caso, devi aggiornarli/rimuoverli manualmente quando le cose cambiano. Questo approccio è "ok" se non si intende modificare/modificare il contenuto del display dopo averlo inizializzato. Diventa insostenibile se lo fai.

Per aggiungerlo direttamente, è necessario creare un DataGridViewRow e inserirlo nei singoli valori, quindi aggiungere lo DataGridViewRow allo DataGridView.Rows.

2) I dati vincolano il DGV. Esistono molti articoli sull'associazione dati a DataGridView. In alcuni casi, è più semplice aggiungere semplicemente i dati a DataTable, quindi estrarre uno DataView da quello e associare lo DataGridView allo DataView. Altre persone trovano più facile collegarsi direttamente a una raccolta.

CodeProject ha un articolo decente per iniziare questo percorso, ma una rapida ricerca su Google produrrà molti altri articoli.

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

+0

avevo considerato l'associazione di dati come sembra essere la soluzione meno kludgy, poiché rappresenta eventuali modifiche dei dati fonte. Edit: I hit enter too quickly. Stavo cercando di dire che non ero assolutamente sicuro dell'associazione dati poiché non l'ho fatto in precedenza. Dò un'occhiata al link che hai fornito, grazie. – morris295

+0

All'inizio è un po 'complicato quando non lo conosci, ma diventa più facile con il tempo e la pratica (anche se può comunque offrirti molti momenti frustranti). La situazione che hai sopra sembra dovrebbe essere un semplice esempio per iniziare, quindi buona fortuna. Sentiti libero di tornare con domande più specifiche se li incontri. – Gjeltema

+0

Ho finito con l'utilizzare il databinding, grazie per la guida è stato molto utile. Mi hai risparmiato un sacco di dolore su questo. – morris295

4

uso come DGV:

DataGridView groupListDataGridView; 

colonna:

DataGridViewTextBoxColumn groupListNameColumn; 

configurazione colonna deve essere del tipo:

groupListNameColumn.DataPropertyName = "name"; 

utilizzare questa proprietà, altrimenti verranno aggiunte tutte le colonne.

groupListDataGridView.AutoGenerateColumns = false; 

popolano in questo modo:

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(); 
} 

e modello:

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

Che cos'è SortableBindingList <>()? – Danon

Problemi correlati