2013-04-28 20 views
8

Bir dizi işlem nesnesini içeren bir Listem var. Yapmaya çalıştığım şey, bu işlem nesnelerini bir formun yüklenmesiyle ilgili Datagridview denetiminde göstermektir, temel olarak Datagridview, listedeki her işlem nesnesinin verilerini görüntülemek için bir işlem kaydının bir örneğini temsil etmelidir.Nesnelerin listesiyle veri ızgarası oluşturuluyor

Datagridviews kullanmaya gelince deneyimsizliğimi kabul etmeliyim ve burada ne yapmam gerektiğini anlamakta biraz zorlanıyorum.

Sorum şu: Datagridview'da görüntülenecek listedeki nesnelerin her birinin ayrıntılarını nasıl edinebilirim?

İşte kodum.

Birinci işlem sınıfı:

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

Şimdi "Kaydol" form için kod: Burada

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

Ve olsun çıktı bu. Register output

cevap

9

Gerçekten bunun için iki üst düzey yaklaşım var.

1) El ile oluşturulan satırları doğrudan DataGridView'a ekleyin. Bu durumda, şeyler değiştikçe bunları manuel olarak güncellemeniz/kaldırmanız gerekir. Bu yaklaşım, başlattıktan sonra ekran içeriğini değiştirmek/değiştirmek istemiyorsanız "Tamam" dır. Eğer yaparsan kabul edilemez olur.

Doğrudan eklemek için, bir DataGridViewRow oluşturmak ve bireysel değerler ile doldurmak ve DataGridViewRowDataGridView.Rows için ekleyin. 2) Veriler DGV'yi bağlar. DataGridView'a bağlanma hakkında birçok makale var. Bazı durumlarda, verilerinizi yalnızca DataTable'a eklemek daha kolaydır ve bundan DataView'u ayıklayın ve DataGridView'u DataView'a bağlayın. Diğer kişiler bir koleksiyona doğrudan bağlanmayı daha kolay buluyor.

CodeProject, bu yolu kullanmaya başlamanız için iyi bir makaleye sahiptir, ancak hızlı bir Google aramasında başka birçok makale bulunur. DGV'nin olarak

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

+0

buna verilere herhangi bir değişiklik için hesaplar beri en az kludgy çözüm gibi görünen veriler bağlayıcı kabul etmişti kaynak. Düzenleme: Çok hızlı bir şekilde enter tuşuna basıyorum. Daha önce yapmadığım için veri bağlama konusunda tamamen emin olmadığımı söylemeyi deniyordum. Sağladığınız bağlantıya bir göz atacağım, teşekkürler. – morris295

+0

İlk bakışta aşina olmadığınızda biraz karmaşıktır, ancak zaman ve pratikte daha kolay hale gelir (yine de size çok sinir bozucu anlar sunabilir). Yukarıda sahip olduğunuz durum, başlamak için basit bir örnek olması gerektiği gibi görünüyor, bu yüzden iyi şanslar. Karşı karşıya gelirseniz daha spesifik sorularla geri dönmekten çekinmeyin. – Gjeltema

+0

Veri bağlama kullanarak sona erdi, rehberlik için çok yardımcı oldu, teşekkür ederim. Bu konuda bana bir ton keder kurtardın. – morris295

4

kullanım:

DataGridView groupListDataGridView; 

sütun:

DataGridViewTextBoxColumn groupListNameColumn; 

kolon kurulum şu şekilde olmalıdır:

groupListNameColumn.DataPropertyName = "name"; 

bu özelliği kullanın, aksi takdirde tüm sütunlar eklenecektir.

groupListDataGridView.AutoGenerateColumns = false; 

böyle doldurmak:

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

ve modelini:

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 <>() nedir? – Danon

İlgili konular