2013-04-28 2 views
8

У меня есть Список, содержащий ряд объектов транзакций. То, что я пытаюсь сделать, это отобразить эти объекты транзакций в элементе управления Datagridview при загрузке формы, в основном Datagridview должен представлять что-то из регистра транзакций для отображения данных для каждого из объектов транзакции в списке.populating datagridview со списком объектов

Должен признаться в отсутствии опыта использования Datagridviews, и у меня возникли трудности с пониманием того, что мне нужно делать здесь.

Мой вопрос: как мне получить информацию о каждом из объектов в списке для отображения в Datagridview?

Вот мой код.

Первый класс транзакции:

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

Теперь код "Register" форме:

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

А вот выход я получаю. Register output

ответ

9

Существует действительно два подхода высокого уровня к этому.

1) Добавить созданные вручную строки непосредственно на DataGridView. В этом случае вы должны вручную обновлять/удалять их по мере изменения вещей. Этот подход «хорошо», если вы не собираетесь изменять/изменять содержимое дисплея после его инициализации. Это становится несостоятельным, если вы это сделаете.

Чтобы добавить его непосредственно, вам необходимо создать DataGridViewRow и заполнить его отдельными значениями, а затем добавить DataGridViewRow в DataGridView.Rows.

2) Данные связывают DGV. Существует множество статей о привязке данных к DataGridView. В некоторых случаях проще просто добавить свои данные в DataTable, а затем извлечь из него DataView и привязать DataGridView к DataView. Другим людям проще напрямую привязываться к коллекции.

В CodeProject есть достойная статья, чтобы вы начали с этого пути, но быстрый поиск в Google даст много других статей.

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

+0

Я рассмотрел привязки данных, как представляется, является наименее запутано решением, так как она учитывает любые изменения в данных источник. Редактировать: я попал слишком быстро. Я пытался сказать, что я не совсем уверен в привязке данных, поскольку я раньше этого не делал. Спасибо, спасибо. – morris295

+0

Сначала это немного сложно, когда вы не знакомы с ним, но со временем и практикой становится легче (хотя он все еще может предложить вам много разочаровывающих моментов). Ситуация, о которой вы говорили выше, кажется, что это должен быть простой пример для начала, так что удачи. Не стесняйтесь возвращаться с более конкретными вопросами, если вы столкнетесь с ними. – Gjeltema

+0

Я закончил использовать привязку данных, спасибо за руководство, это было очень полезно. Ты спас мне массу горя. – morris295

4

использование в качестве DGV:

DataGridView groupListDataGridView; 

колонка:

DataGridViewTextBoxColumn groupListNameColumn; 

установки колонки должны быть такими:

groupListNameColumn.DataPropertyName = "name"; 

используйте это свойство, иначе будут добавлены все столбцы.

groupListDataGridView.AutoGenerateColumns = false; 

заселить как это:

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

и модель:

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

Что такое SortableBindingList <>()? – Danon