【发布时间】:2017-02-05 00:14:16
【问题描述】:
我目前正在使用 C# WPF DataGrid。DataGrid 使用我的数据库作为 ItemsSource,我使用 DataGrid 列出我的订单。
例如:
大汉堡 1
大 MAC 1
芝士汉堡 1MCNUGGETS 2
鸡 2
可口可乐 2
百事可乐 2
如您所见,我列出了每个订单的商品,每个商品旁边都有数字 1 或数字 2。这些数字帮助我确定哪些商品属于哪个订单。强>
我的问题是如何绘制每一行,哪些商品属于特定订单,例如当商品与订单 1 相关联时为红色,当商品与订单 2 相关联时为蓝色,依此类推。或者,作为替代方案,仅绘制每个订单的最后一行(请看下面的粗体部分)。
我需要以某种方式将它们分开,因为当我将它们加载到数据网格时,它看起来很乱。
想象一下:
大汉堡 1 BIG MAC 1
芝士汉堡 1
麦克努吉斯 2
鸡 2
可口可乐 2
百事可乐 2
大汉堡 3
巨无霸 3
芝士汉堡 3
MCNUGGETS 3
鸡 4
可口可乐 4
百事可乐 4
看起来很乱..
(正如我之前所说,如果不可能整行,是否可以仅绘制每个订单的最后一行,只是为了在屏幕上创建可见的分隔。)
这是我到目前为止所拥有的,但这不是最佳的,因为它使用硬编码值:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding NumberOfOrder}" Value="1">
<Setter Property="Background" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding NumberOfOrder}" Value="2">
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding NumberOfOrder}" Value="3">
<Setter Property="Background" Value="Orange"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
try
{
InitializeComponent();
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
this.WindowState = WindowState.Maximized;
datagrid1.ItemsSource = OrdersController.localOrders();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
在这里你可以看到我正在使用硬编码值,以防我的 NumberOfOrder 是 1,2 或 3 下一步: 绘制行,这是不是很好的解决方案,因为NumberOfOrder 会有很多不同的值。
在 Mat 回答后编辑:
public MainWindow()
{
InitializeComponent();
CollectionViewSource collectionViewSource = new CollectionViewSource();
var ordersList = OrdersController.localOrders(); //ORDERS LIST
collectionViewSource.Source = new List<OrdersController.OrdersLocal>()
{
foreach(var item in ordersList)
{
new OrdersController.OrdersLocal() {Title = item.Title, NumberOfOrder = item.NumberOfOrder, Desc = item.Desc, User = item.User }
}
};
collectionViewSource.GroupDescriptions.Add(new PropertyGroupDescription("NumberOfOrder"));
DataContext = collectionViewSource;
}
【问题讨论】:
-
.. ..有人吗? :(
-
啊,现在我明白了 ;-) 你可以做的更简单:collectionViewSource.Source =ordersList;或者,如果您想使用 OrdersLocal 类,您可以使用 LINQ 查询:collectionViewSource.Source= ordersList.Select(x => new OrdersLocal() {Title = x.Title });
-
谢谢兄弟,太棒了,顺便说一句,当我折叠订单时,是否可以放置一些文本(如每个组的标题文本),以便使用应用程序的人可以看到它的内容,即使订单是崩溃了。例如,我单击折叠,但我想看到像这样的文本 Order : numberofOrder,所以我可以确定我折叠的顺序 :)
-
hmm :)) 你能帮我处理这个分组项目的标题文本吗?有什么建议吗?
-
您必须修改 GroupItem 的 ControlTemplate。我建议你提出一个新问题,因为如果我们混淆了你的所有后续问题,这可能会让其他人感到困惑
标签: c# wpf colors datagrid rows