如何将数据库和数据网格绑定到ObservableCollection WPF

时间:2016-05-03 06:46:33

标签: wpf binding datagrid observablecollection

我一直在谷歌搜索找到答案,但我找不到。 这是我的问题,我有一个

  • 数据库表调用 sold_item_details
  • 包含七列的数据网格
  • 的ObservableCollection

1需要将ObservableCollection与数据库绑定

我想从数据库中获取字符串集,需要添加到ObservableCollection中     行。我希望实现,类似于以下代码,

 ObservableCollection<string> o = new ObservableCollection<string>();
 o.add("string1","string2","string3","string4","string5"); // this has to be one row
 o.add("string6","string7","string8","string9","string10");

同样有一组数据集。到目前为止,我已经看到对象已添加并从中添加     这是实现的,但我不想为每组字符串创建对象。

2需要将ObservableCollection绑定到datagrid

所以ObservableCollection中的数据集作为行添加到数据网格中(有     五栏)

有人能建议我实现这个目标吗?

编辑:这些是我所取得的代码,

<DataGrid x:Name="dataGrid" AutoGenerateColumns="False" CanUserResizeRows="False" Grid.ColumnSpan="8"
    Margin="-20,0,30.5,0" CanUserResizeColumns="False" CanUserReorderColumns="False"
    CanUserSortColumns="False" CanUserAddRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding supplier_id}" CanUserResize="False" FontSize="16"
            Header="Supplier" Width="0.18*" />
        <DataGridTextColumn Binding="{Binding item_id}" CanUserResize="False" FontSize="16"
            Header="ItemID" Width="0.13*" />
        <DataGridTextColumn Binding="{Binding item_name}" CanUserResize="False" FontSize="16"
            Header="Item name" Width="0.2*" />
        <DataGridTextColumn Binding="{Binding weight}" CanUserResize="False" FontSize="16" Header="kg"
            Width="0.1*" />
        <DataGridTextColumn Binding="{Binding price_per_kg}" CanUserResize="False" FontSize="16"
            Header="Price/kg" Width="0.1*" />
        <DataGridTextColumn Binding="{Binding no_of_bags}" CanUserResize="False" FontSize="16"
            Header="Bags" Width="0.07*" />
        <DataGridTextColumn Binding="{Binding rent_amt}" CanUserResize="False" FontSize="16"
            Header="Rent" Width="0.07*" />
        <DataGridTextColumn Binding="{Binding total_price}" CanUserResize="False" FontSize="16"
            Header="Value" Width="0.15*" />
    </DataGrid.Columns>
</DataGrid>

此类的OrderItem类属性应该转到datagrid的列

public class OrderItem
{
    public OrderItem(string supplierId,
        string itemId,
        string itemName,
        decimal weight,
        decimal price,
        int noOfBags,
        decimal rentAmt)
    {
        SupplierId = supplierId;
        ItemId = itemId;
        Weight = weight;
        Price = price;
        NoOfBags = noOfBags;
        RentAmt = rentAmt;

        BagPrice = // bag price will get from a method
        TotalPrice = // something

    }

    public string SupplierId { get; set; } // Supplier's ID
    public string ItemId { get; set; } // Item ID
    public string ItemName { get; set; }// Item Name
    public decimal Weight { get; set; } // weight of the item
    public decimal Price { get; set; } // Total sum of the order
    public int NoOfBags { get; set; } // Number of bags in a single order 
    public decimal BagPrice { get; set; }
    public decimal RentAmt { get; set; } // To weigh the item
    public decimal TotalPrice { get; private set; }
}

添加项目时,会将其发送到ObservableCollection

ObservableCollection<OrderItem> orderItems = new ObservableCollection<OrderItem>();
//and at the right event (key enter is pressed) the orderItem object is added to the orderItems 
orderItems.add(orderI);

在网格的xaml代码中我已经直接绑定到数据库我需要的是将它绑定到ObservableCollection

1 个答案:

答案 0 :(得分:1)

为什么不创建包含5列的数据网格并为其创建数据类。这样数据网格的源可以绑定到视图模型中的ObservableCollection。您可以在数据网格的模板中设置每个列。在这种情况下,您无需将每个项目添加到列表中。也许将从数据库中提取的所有项目添加到ObservableCollection。

也许内存消耗会更少,但更好的设计是拥有一个数据类和一个绑定到datagrid的项列表。这5个字符串可以用于某种目的,对吧?为了进一步计算或计算,最好通过使用ObservableCollection来满足您的需求,从而重用获取的数据。无论如何,这取决于你。如果你想要你也可以坚持传递5个字符串的方式。