我目前使用C#WPF DataGrid
。
DataGrid
正在使用我的数据库作为ItemsSource
,我使用DataGrid
列出我的订单。
例如:如何根据单元格中的变量值设置数据网格行的背景
BIG BURGER 1
BIG MAC 1
干酪汉堡包1麦乐2
鸡2
COCA-COLA 2
PEPSI 2
如你可以看到我从每个订单列出项目,并且每个项目旁边都有数字1或数字2.这些数字,正在帮助我定位哪个项目属于哪个订单。
我的问题是,如何绘制每行,哪些项目属于特定订单,例如,当项目与订单1关联时为红色,当项目与订单2关联时为蓝色等等。或者,作为替代方法,只绘制每个订单的最后一行(请参阅下面的粗体部分)。
我需要以某种方式将它们分开,因为当我将它们加载到datagrid时,它看起来很乱。
想象一下:
BIG BURGER 1 BIG MAC 1
干酪汉堡包1
麦乐2
鸡2
COCA-COLA 2
PEPSI 2
BIG BURGER 3
BIG MAC 3
干酪汉堡包3
麦乐3
鸡4
COCA-COLA 4
PEPSI 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);
}
}
}
在这里,你可以看到我使用硬编码值,如果我的是1,2或3 下一步:油漆行,这不是很好的解决方案,因为我将有许多不同的值NumberOfOrder
。
编辑时,垫的回答是:
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;
}
.. ..Anyone? :( –
啊现在我明白了;-)你可以做得更简单:collectionViewSource.Source = ordersList;或者如果你想使用OrdersLocal类,你可以到一个LINQ查询:collectionViewSource.Source = ordersList.Select(x => new OrdersLocal(){Title = x.Title}); – Mat
感谢兄弟,这是真棒,顺便说一句,有可能把一些文本(如每个组的标题文本),当我崩溃的顺序,所以正在使用应用程序的人可以看到它即使订单被折叠。例如我点击折叠,但我想看到这样的文本Order:numberofOrder,所以我可以定位我倒塌的顺序:) –