2013-04-28 12 views
8

私は一連のトランザクションオブジェクトを含むリストを持っています。私がしようとしているのは、これらのトランザクションオブジェクトをフォームのロード時にDatagridviewコントロールに表示することです。基本的に、Datagridviewはトランザクションレジスタの何かを表して、リスト内の各トランザクションオブジェクトのデータを表示する必要があります。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; 
    } 
    } 
} 

"登録" フォームのコード:

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

これには2つの高度なアプローチがあります。

1)手動で作成した行をDataGridViewに直接追加します。この場合は、状況が変わると手動で更新/削除する必要があります。この方法は、初期化後にディスプレイの内容を変更/変更するつもりがない場合は「ok」です。もしあなたがそうしたら、それは支持されなくなる。

DataGridViewRowを直接追加するには、個々の値を入力してからDataGridViewRowDataGridView.Rowsに追加する必要があります。

2)データはDGVに拘束されます。 DataGridViewへのデータバインディングに関する多くの記事があります。場合によっては、データをDataTableに追加してからDataViewを抽出し、DataGridViewDataViewにバインドする方が簡単です。他の人は、コレクションに直接バインドするほうが簡単だと感じています。

CodeProjectは、あなたがその道を歩み始めるためのまともな記事を持っていますが、すばらしいGoogle検索では他の多くの記事が得られます。

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

+0

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

とモデル:

groupListDataGridView.AutoGenerateColumns = false; 

は次のように移入しますソース。 編集:入力が早すぎます。私はデータバインディングについて完全にはわかっていなかったと言いたいと思っていた。私はあなたが提供したリンクを見ていきます、ありがとう。 – morris295

+0

最初はあなたがそれに慣れていないときは少し複雑ですが、時間と練習ではもっと簡単になります(それでもまだ多くの不満を感じることがあります)。あなたが上に持っている状況は、始めるための簡単な例でなければならないようです。あなたがそれらに出くわす場合は、より具体的な質問に戻って自由に感じてください。 – Gjeltema

+0

私はデータバインディングを使用して終了しました。ガイダンスをいただきありがとうございました。あなたは私にこの悲しみのトンを救った。 – morris295

4

DGVとして使用:

DataGridView groupListDataGridView; 

コラム:

DataGridViewTextBoxColumn groupListNameColumn; 

列の設定は次のようにする必要があります:

groupListNameColumn.DataPropertyName = "name"; 

このプロパティを使用すると、すべての列が追加されます。それは、データへの変更を占めているので、少なくともクルージ的解決策のように見えるように私は、データバインディングを検討していた

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

関連する問題