我一直在谷歌搜索找到答案,但我找不到。 这是我的问题,我有一个
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
答案 0 :(得分:1)
为什么不创建包含5列的数据网格并为其创建数据类。这样数据网格的源可以绑定到视图模型中的ObservableCollection。您可以在数据网格的模板中设置每个列。在这种情况下,您无需将每个项目添加到列表中。也许将从数据库中提取的所有项目添加到ObservableCollection。
也许内存消耗会更少,但更好的设计是拥有一个数据类和一个绑定到datagrid的项列表。这5个字符串可以用于某种目的,对吧?为了进一步计算或计算,最好通过使用ObservableCollection来满足您的需求,从而重用获取的数据。无论如何,这取决于你。如果你想要你也可以坚持传递5个字符串的方式。