2012-10-24 14 views
5

Immaginate una classe Item con tre proprietà:Associazione a DataGridView con una serie di proprietà

  • Nome della voce (stringa)
  • Quantità (INT)
  • prezzo (un array/lista di classe ItemPrice che ha due proprietà: VendorName e Price).

Fondamentalmente, desidero associare questa classe a un oggetto DataGridView in cui ogni riga è di classe Item. Il problema è che ci sono diversi fornitori (o possono essere modificati in seguito) e l'associazione dei dati deve supportare questa quantità dinamica di fornitori.

Inoltre, come bonus, voglio aggiungere una colonna in più che mostra il prezzo di un venditore moltiplicato per la quantità.

I do non desidera utilizzare la modalità virtuale (è così che sto eseguendo questo compito al momento).

Grazie!

+0

Devi essere in grado di modificare il listino prezzi o semplicemente di visualizzarlo? – Kazetsukai

+0

Sì, ho bisogno anche di editing. Dovrebbe essere un legame a doppio senso. –

risposta

0

Un modo per ottenere ciò sarebbe creare una proprietà stringa sull'elemento classe (o su una nuova classe o una classe anonima) e implementare questa proprietà per concatenare tutti i fornitori e i prezzi degli articoli insieme.

Gli svantaggi di questo sono che può sembrare brutto avere tutti gli elementi in una stringa nella stessa colonna e non sarà possibile modificare gli elementi in modo intuitivo.

Tuttavia, raggiungerebbe l'obiettivo di mostrare un numero arbitrario di venditori e prezzi e si potrebbe facilmente aggiungere il prezzo del fornitore moltiplicato per la quantità a questo.

+0

Sfortunatamente, questa non è un'opzione. Tutti i valori devono essere sulle loro colonne separate. –

0

è possibile associare una tabella a una vista datagrid creata in modo dinamico. qui è un frammento di codice di esempio:

public class ItemBinding 
     { 
     List<Item> itemList = new List<Item>(); 
     Item it = null; 
     DataRow dr = null; 
     public void mapping() 
      { 
        for (int i = 0; i <= 4; i++) 
        { 
         it = new Item(); 
         it.qty = i; 
         it.name = "name" + i; 
         it.itemprice.Vendorname="vendor" + i; 
         it.itemprice.price = 20 * i; 
         itemList.Add(it); 
        } 
      } 
     public void binding() 
     { 
       DataTable dt = new DataTable(); 

        dt.Columns.Add(new DataColumn("item", typeof(string))); 
        dt.Columns.Add(new DataColumn("quantity", typeof(int))); 
        dt.Columns.Add(new DataColumn("vendor", typeof(string))); 

       //item list contains the detail of the class 

        foreach (Item c in itemList) 
         { 
          dr = dt.NewRow(); 

          dr[0] = c.qty; 
          dr[1] = c.name; 
          dr[2] = c.itemprice.Vendorname;; 
          dt.Rows.Add(dr); 
          } 
        dataGridView1.AutoGenerateColumns = true; 
        dataGridView1.DataSource = dt; 
        } 
      } 
    public class Item 
     { 
      public int qty{ get; set; } 
      public string name { get; set; } 
      public ItemPrice itemprice { get; set; } 
      public Item() 
       { 
        this.itemprice = new ItemPrice(); 
        } 
     } 

      public class ItemPrice 
      { 
      public string Vendorname { get; set; }  
      public int price { get; set; } 
      } 

in questo caso è un itemprice ha due proprietà che è nidificato o si può ereditare. questo può aiutarti.

Problemi correlati