web-dev-qa-db-fra.com

remplissage du datagridview avec la liste des objets

J'ai une liste qui contient une série d'objets de transaction. Ce que j'essaie de faire est d'afficher ces objets de transaction dans un contrôle Datagridview lors du chargement d'un formulaire, fondamentalement, Datagridview devrait représenter quelque chose d'un registre de transaction pour afficher les données de chacun des objets de transaction dans la liste.

Je dois admettre un manque d'expérience en ce qui concerne l'utilisation de Datagridviews et j'ai du mal à comprendre ce que je dois faire ici.

Ma question est la suivante: comment puis-je obtenir les détails de chacun des objets de la liste à afficher dans Datagridview?

Voici mon code.

D'abord la classe de transaction:

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

Maintenant, le code du formulaire "S'inscrire":

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

Et voici la sortie que j'obtiens. Register output

10
morris295

Il y a vraiment deux approches de haut niveau à cela.

1) Ajoutez les lignes créées manuellement directement dans le DataGridView. Dans ce cas, vous devez les mettre à jour/supprimer manuellement à mesure que les choses changent. Cette approche est "ok" si vous n'avez pas l'intention de modifier/changer le contenu de l'affichage après l'avoir initialisé. Cela devient intenable si vous le faites.

Pour l'ajouter directement, vous devez créer un DataGridViewRow, le remplir avec les valeurs individuelles, puis ajouter le DataGridViewRow au DataGridView.Rows.

2) Les données lient le DGV. Il existe de nombreux articles sur la liaison de données à un DataGridView. Dans certains cas, il est plus facile d'ajouter simplement vos données à un DataTable, puis d'extraire un DataView de cela et de lier le DataGridView au DataView . D'autres personnes trouvent plus facile de se lier directement à une collection.

CodeProject a un article décent pour vous aider à démarrer dans cette voie, mais une recherche rapide sur Google donnera de nombreux autres articles.

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

9
Gjeltema

utiliser comme DGV:

DataGridView groupListDataGridView;

colonne:

DataGridViewTextBoxColumn groupListNameColumn;

la configuration de la colonne doit ressembler à ceci:

groupListNameColumn.DataPropertyName = "name";

utilisez cette propriété, sinon toutes les colonnes seront ajoutées.

groupListDataGridView.AutoGenerateColumns = false;

remplir comme ceci:

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

et modèle:

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
}
5
Onder Ezdi