关于wpf中datagrid动态设置单元格背景问题!

corywind 2011-03-14 11:45:05
最近新接个项目,用wpf做的系统从来没有做过,画面是xaml的文件,后台用c#太困难了,找个属性都找不到
现在需要在前台DATAGRID中根据数据动态设置单元格的背景属性,查了半天,光知道是需要绑定的,但是具体步骤还是不清楚
无从下手阿,
哪位高手做过给指条名路吧,谢谢!
...全文
613 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复

<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication11"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:ConVerter x:Key="Converter" />
</Window.Resources>
<DataGrid AutoGenerateColumns="False" Height="310" Name="dataGrid1" Width="346" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=A}" Header="Header" />
<DataGridTextColumn Binding="{Binding Path=B}" Header="Header" />
</DataGrid.Columns>
<DataGrid.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding Path=A, Converter={StaticResource Converter}}"/>
</Style>
</DataGrid.CellStyle>
</DataGrid>
</Window>


public partial class MainWindow : Window
{
DataTable dt = new DataTable();
public MainWindow()
{
dt.Columns.Add("A",typeof(int));
dt.Columns.Add("B",typeof(int));
for (int i = 0; i < 20; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i;
dr[1] = i + 5;
dt.Rows.Add(dr);
}
dt.AcceptChanges();
InitializeComponent();
dataGrid1.DataContext = dt.DefaultView;
}
}
public class ConVerter : IValueConverter
{

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((int)value > 10)
{
return Brushes.Blue;
}
else
{
return Brushes.Green;
}
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
corywind 2011-03-14
  • 打赏
  • 举报
回复
能具体点有代码吗,
大概流程我清楚了,但是前台的xaml文件里面如何定义能使绑定的值只针对某一个单元格
后台代码我看网上的资料说是在model里写属性设置,但是具体怎么写啊
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复
后台写一个类继承IValueConverter,里面实现根据数据返回背景Brush,然后在xaml里面声明Resources,再将单元格背景色绑定到该资源键值。
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复
谢谢你了哥们,我感激涕零了都。
不管是啥数据源,肯定都实现了IEnumerable接口,绑定方式和dataview都是一样的。
corywind 2011-03-14
  • 打赏
  • 举报
回复
虽然没解决问题,但是多少又明白了点,先结贴了
corywind 2011-03-14
  • 打赏
  • 举报
回复
楼上的那个Binding="{Binding CreateTime, Converter={StaticResource DataTimeConverter}}"
这里面的DataTimeConverter是怎么倒进来的,我现在老是题是我找不到这个名字啊
anbin0814 2011-03-14
  • 打赏
  • 举报
回复

<my:DataGrid Grid.Row="1" AutoGenerateColumns="False" ItemsSource="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Top" Name="dataGrid1" SelectionMode="Single"
Height="342" Width="780" RowBackground="#FFDFF0F4" AlternatingRowBackground="#FFD0DEE6" ColumnHeaderHeight="25" RowHeight="25" RowHeaderWidth="0"
HorizontalGridLinesBrush="#FF7E9AB0" VerticalGridLinesBrush="#FF7E9AB0" Background="White" CanUserAddRows="False" CanUserDeleteRows="False"
CanUserResizeRows="False" MouseDoubleClick="dataGrid1_MouseDoubleClick">
<my:DataGrid.ColumnHeaderStyle>
<Style TargetType="my:DataGridColumnHeader" >
<Setter Property="Background" Value="#FFBFCFDC"/>
<Setter Property="SeparatorVisibility" Value="Visible" />
<Setter Property="SeparatorBrush" Value="Black" />
</Style>
</my:DataGrid.ColumnHeaderStyle>
<my:DataGrid.Columns>
<my:DataGridTemplateColumn Header="选择" Width="0.03*">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Name="chkPrint" IsChecked="{Binding IsChecked}" Click="chkPrint_Click"></CheckBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
<my:DataGridTextColumn Header="序号" IsReadOnly="True" Binding="{Binding Order}" Width="0.03*"/>
<!--<my:DataGridTextColumn Header="病区/科室" IsReadOnly="True" Binding="{Binding Col_Name}" Width="0.1*"/>-->
<my:DataGridTextColumn Header="制单时间" IsReadOnly="True" Binding="{Binding CreateTime, Converter={StaticResource DataTimeConverter}}" Width="0.14*"/>
<my:DataGridTextColumn Header="单据编号" IsReadOnly="True" Binding="{Binding No}" Width="0.1*"/>
<my:DataGridTextColumn Header="单据类型" IsReadOnly="True" Binding="{Binding TypeName}" Width="0.1*"/>
<my:DataGridTextColumn Header="数量" IsReadOnly="True" Binding="{Binding Quantity}" Width="0.1*"/>
<my:DataGridTextColumn Header="制单人" IsReadOnly="True" Binding="{Binding Handler}" Width="0.1*"/>
</my:DataGrid.Columns>

</my:DataGrid>

corywind 2011-03-14
  • 打赏
  • 举报
回复
这个是我刚刚写的前台
<my:DataGrid ItemsSource="{Binding}" Grid.Column="3" Grid.Row="3" Height="120" HorizontalAlignment="Left" Margin="1,0,0,0" Name="dataGrid1" VerticalAlignment="Bottom" Width="1000" Grid.ColumnSpan="5" SelectionMode="Single" SelectionUnit="Cell">
<my:DataGrid.Columns>
<my:DataGridTextColumn Header="週間" Width="80" Binding="{Binding Path=Name}">
<my:DataGridTextColumn.CellStyle>
<Style TargetType = "my:DataGridCell">
<Setter Property="Background" Value="{Binding Path=Name, Converter={StaticResource Converter}}">

</Setter>
</Style >
</my:DataGridTextColumn.CellStyle>
</my:DataGridTextColumn>

</my:DataGrid.Columns>
</my:DataGrid>

这个是后台的新建的CLASS文件
public class ConVerter : IValueConverter
{

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((int)value > 10)
{
return Brushes.Blue;
}
else
{
return Brushes.Green;
}
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

lizhibin11 2011-03-14
  • 打赏
  • 举报
回复
唉,一样的,那是另一个问题了,是数据源类型的问题.
我帮不了你了,你再等高手吧.
corywind 2011-03-14
  • 打赏
  • 举报
回复
我这个是web的,不是winform的没有datatable,只有datacontext=model
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复
因为整个上下文的数据源都是datatable,所以path=A或B在整个上下文中都是起作用的
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复
xmlns:local="clr-namespace:WpfApplication11"
表明命名空间
<local:ConVerter x:Key="Converter" />
该命名空间下的类名,然后定义一个键值
corywind 2011-03-14
  • 打赏
  • 举报
回复
代码层是分别的两个类文件吗
绑定的时候就能自动识别这两个类?
已经有点明白了,绑定这里还稍微有点晕
高手再给解释一下
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复

<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication11"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:ConVerter x:Key="Converter" />
</Window.Resources>
<DataGrid AutoGenerateColumns="False" Height="310" Name="dataGrid1" Width="346" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=A}" Header="Header1">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding Path=A, Converter={StaticResource Converter}}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Path=B}" Header="Header2">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding Path=B, Converter={StaticResource Converter}}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Window>
lizhibin11 2011-03-14
  • 打赏
  • 举报
回复
或者把XAML写为这样,可以在同一行也有不同的颜色,如有帮助请尽快结帖,超过两千分够了五个三角就不在这里浪费时间了。
[code=XML]
<Window x:Class="WpfApplication11.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication11"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:ConVerter x:Key="Converter" />
</Window.Resources>
<DataGrid AutoGenerateColumns="False" Height="310" Name="dataGrid1" Width="346" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=A}" Header="Header1">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding Path=A, Converter={StaticResource Converter}}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Path=B}" Header="Header2">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell" >
<Setter Property="Background" Value="{Binding Path=B, Converter={StaticResource Converter}}"/>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Window>
/code]

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧