2013-04-28 17 views
8

Mam listę zawierającą serię obiektów transakcji. Próbuję zrobić to, aby wyświetlić te obiekty transakcji w formancie Datagridview przy ładowaniu formularza, w zasadzie widok Datagridview powinien reprezentować coś z rejestru transakcji, aby wyświetlić dane dla każdego obiektu transakcji na liście.zapełnianie datagridview z listą obiektów

Muszę przyznać się do braku doświadczenia, jeśli chodzi o używanie Datagridviews i mam pewne trudności ze zrozumieniem tego, co muszę tutaj zrobić.

Moje pytanie brzmi: w jaki sposób uzyskać szczegółowe informacje o każdym z obiektów na liście, które mają być wyświetlane w widoku danych Datagridview?

Oto mój kod.

Pierwsza klasa transakcja:

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

Teraz kod na "Rejestracja" postaci:

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

A oto wyjście otrzymuję.

Odpowiedz

9

Jest to naprawdę dwa podejścia wysokiego poziomu.

1) Dodaj ręcznie utworzone wiersze bezpośrednio do DataGridView. W takim przypadku musisz ręcznie zaktualizować/usunąć je w miarę zmian. To podejście jest "ok", jeśli nie zamierza się zmieniać/zmieniać zawartości ekranu po jego zainicjowaniu. Stanie się nie do utrzymania.

Aby dodać go bezpośrednio, należy utworzyć DataGridViewRow i wypełnić go indywidualnymi wartościami, a następnie dodać DataGridViewRow do DataGridView.Rows.

2) Dane wiążą DGV. Istnieje wiele artykułów na temat łączenia danych z DataGridView. W niektórych przypadkach łatwiej jest po prostu dodać swoje dane do DataTable, a następnie wyodrębnić z tego DataView i powiązać DataGridView z DataView. Inne osoby łatwiej wiążą się bezpośrednio z kolekcją.

CodeProject ma przyzwoity artykuł, aby rozpocząć tę drogę, ale szybkie wyszukiwanie w Google przyniesie wiele innych artykułów.

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

+0

I uznała wiązania danych, ponieważ wydaje się być najmniej kludgy rozwiązanie, ponieważ stanowi ona dla wszelkich zmianach danych źródło. Edycja: zbyt szybko wcisnąłem klawisz Enter. Próbowałem powiedzieć, że nie byłem całkowicie pewien powiązania danych, ponieważ tak naprawdę nie zrobiłem tego wcześniej. Popatrzę na podany link, dzięki. – morris295

+0

Początkowo jest to trochę skomplikowane, gdy nie jesteś obeznany z nim, ale z czasem i ćwiczeniem staje się łatwiejsze (choć wciąż oferuje wiele frustrujących chwil). Sytuacja, którą masz powyżej, wydaje się być prostym przykładem na początek, więc powodzenia. Jeśli spotkasz się z nimi, możesz wrócić do bardziej szczegółowych pytań. – Gjeltema

+0

Skończyło się na używaniu databinding, dziękuję za wskazówki, to było bardzo pomocne. Uratowałeś mi mnóstwo żalu na ten temat. – morris295

4

zastosowanie jako DGV:

DataGridView groupListDataGridView; 

kolumna

DataGridViewTextBoxColumn groupListNameColumn; 

konfiguracji kolumna powinna być jak poniżej:

groupListNameColumn.DataPropertyName = "name"; 

użyj tej właściwości, w przeciwnym razie wszystkie kolumny zostaną dodane.

groupListDataGridView.AutoGenerateColumns = false; 

zapełnić tak:

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

i model:

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

Co to jest SortableBindingList <>()? – Danon

Powiązane problemy