2012-10-24 11 views
5

Wyobraźmy sobie klasę Item z trzech właściwości:Wiązanie DataGridView z tablicą właściwości

  • Nazwa elementu (String)
  • Ilość (int)
  • Cena (tablicę/listę klasy ItemPrice że ma dwie właściwości: VendorName i Price).

Zasadniczo chcę powiązać tę klasę do DataGridView, gdzie każdy wiersz jest klasy Element. Problem polega na tym, że istnieje inna liczba dostawców (lub może być edytowana później), a powiązanie danych musi obsługiwać tę dynamiczną liczbę dostawców.

Dodatkowo, jako bonus, chcę dodać dodatkową kolumnę, która wyświetla cenę sprzedawcy pomnożoną przez ilość.

Mam nie chcę używać trybu wirtualnego (tak właśnie wykonuję to zadanie w tej chwili).

Dziękujemy!

+0

Czy chcesz mieć możliwość edycji cennika lub po prostu go wyświetlić? – Kazetsukai

+0

Tak, potrzebuję również edycji. Powinien być wiązaniem dwukierunkowym. –

Odpowiedz

0

Jednym ze sposobów osiągnięcia tego byłoby utworzenie właściwości łańcucha znaków na elemencie klasy (lub na nowej klasie lub klasie anonimowej) i wdrożenie tej właściwości w celu połączenia wszystkich dostawców i cen produktów.

Wadą tego jest to, że może wyglądać paskudnie, gdy wszystkie elementy w łańcuchu znajdują się w tej samej kolumnie, i nie będzie można edytować elementów w intuicyjny sposób.

Osiągnęłoby to jednak cel polegający na wyświetleniu dowolnej liczby dostawców i cen, a do tego można łatwo dodać cenę sprzedawcy pomnożoną przez ilość.

+0

Niestety, nie jest to opcja. Wszystkie wartości muszą znajdować się w oddzielnych kolumnach. –

0

można zmapować tabelę do datagridview, który jest tworzony dynamicznie. tutaj jest urywek przykład kodu:

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

w tym przypadku itemprice to ma dwie właściwości, które są zagnieżdżone lub można je dziedziczyć. to może ci pomóc.

Powiązane problemy