productBll.GetCollectionProduct2();
3.2)、DataGridView控件的基本属性。
DataGrid控件的基本显示属性
RowBackground
DataGrid中的行的背景颜色。
AlternationRowBackground
交替行背景色。
ColumnHeaderHeight
标题列的高度。
RowHeaderWidth
具有行标题头的宽度。
ColumnWidth
每列的宽度。
RowHeight
每行的高度。
GridLinesVisibility
确定是否显示网格线。
VerticalGridLinesBrush
用于绘制列之间的网格线的画刷。
HorizontalGrdiLinesBrush
用于绘制行之间网格线的画刷。
HeadersVisibility
确定显示哪个题头的DataGridHeaders。
HorizontalScrollBarVisibility
是否显示水平滚动条。
VerticalScrollBarVisibility
是否显示垂直滚动条。
CanUserResizeColumns
阻止用户通过拖动边缘来改变大小。
CanUserReorderColumns
阻止用户从一个位置拖动到另外一个位置。
AutoGenerateColumns
关闭自动生成列功能。
3.3)、定义列。
使用自动生成的列,可快速创建显示所有数据的DataGrid控件,但放弃了一些控制能力。例如,不能控制列的顺序,每列的宽度,以及如何格式化列中的值以及列中的标题。DataGrid控件支持以下几种类型的列。
a)、DataGridTextColumn。这种类对于大部分数据类型是标准选择。
b)、DataGridCheckBoxColumn。这种列用于显示复选框。
c)、DataGridHyperlinkColumn。这种列显示可单机的列。
d)、DataGridComboBox。这种列用于显示下拉框的ComboBox。
e)、DataGridTemplateColumn。这种列功能非常强大。
3.3.1)、DataGridTextColumn。
有两个常用属性:Visibility属性和DisplayIndex。其中Visibility属性来动态地显示和隐藏列,DisplayIndex用于来设置列的位置。
DataGridTextColumn普通写法:
<DataGrid Name="dataGrid1" CanUserResizeColumns="False" CanUserReorderColumns="False" AutoGenerateColumns="False">
<DataGrid.Columns>
<!--设置Header属性和Binding属性。-->
<DataGridTextColumn Header="商品价格" Binding="{Binding Path=ProPrice,StringFormat={}{0:C}}">
</DataGridTextColumn>
</DataGrid>
DataGridTextColumn的其他用法:
<DataGrid Name="dataGrid1" CanUserResizeColumns="False" CanUserReorderColumns="False" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="商品编号" Binding="{Binding Path=ProId}"></DataGridTextColumn>
<DataGridTextColumn Header="商品名称" Binding="{Binding Path=ProName}"></DataGridTextColumn>
<DataGridTextColumn>
<!--设置Header属性。-->
<DataGridTextColumn.Header>
<!--设置圆角-->
<Border CornerRadius="5" Background="Blue">
<TextBlock Foreground="BlueViolet">商品价格</TextBlock>
</Border>
</DataGridTextColumn.Header>
<!--设置Binding属性。-->
<DataGridTextColumn.Binding>
<Binding Path="ProPrice" StringFormat="{}{0:C}"></Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
3.3.2)、DataGridCheckBoxColumn。
与DataGridTextColumn一样,使用Binding属性提取数据。是用于设置内部CheckBox元素的IsChecked属性的true或者false值。
<DataGridCheckBoxColumn Header="选中状态" Binding="{Binding Path=ProIsDrag}"> </DataGridCheckBoxColumn>
3.3.3)、DataGridHyperlinkColumn。
3.3.4)、DataGridComboBoxColumn。
3.3.4)、DataGridTemplateColumn。]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]有待完善!!!!!!!!!!!!!
3.4)、设置列的格式和样式。
可通过ElementStyle属性创建应用于DataGrid单元格内部的元素的样式。对于简单的DataGridTextColumn,该元素是TextBlock,对于DataGridCheckBoxColumn,单元格内部的元素是复选框。对于DataGridTemplateColumn,单元格内部的元素是在数据模板中创的任何元素。
xaml代码:
<!--设置换行样式,要设置列的宽度。-->
<DataGridTextColumn Header="商品描述" Binding="{Binding Path=ProDescribe}" Width="60">
<DataGridTextColumn.ElementStyle>
<!--设置样式。-->
<Style TargetType="TextBlock">
<!--设置TextBlock元素的TextWrapping属性。-->
<Setter Property="TextBlock.TextWrapping" Value="Wrap"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
其中,ElementStyle提供了设置特定列中所有单元格的格式的方法。然而在某些情况下,可能希望为每一列中的每个单元格应用格式化设置。完成该工作的最简单的方式是为DataGrid.RowStyle属性设置样式,DataGrid控件还提供了少部分用于设置网络其他部分(如列标题头和行标题头)格式的额外属性。
基于样式的DataGrid属性
样式的适用范围
ColumnHeaderStyle
样式的适用范围
RowHeaderStyle
位于网格顶部的列标题的TextBlock。
RowStyle
用于普通行(在列种没有遇到通过列的ElementStyle属性确定制过的行为)的TextBlock。
DragIndicatorStyle
当用户正在将列标题头拖动到新位置时用于列标题头的TextBlock。
3.5)、设置行的格式(e.Row.Background)。
很多情况下,标识包含特定数据的行更有用,例如,可强调价格较高的产品和到期的货运,可通过处理DataGrid.LoadingRow事件已编程的方式应用此类格式。这个时候需要使用DataGridTemplate和自定义值转换器。
每当一行的数据出现在屏幕上时,都会立即为该行为引发LoadingRow事件,这种方式的优点是应用程序不必永远格式化整个网络;相反,只为当前可见的行为引发LoadingRow事件,但也有缺点,当用户在网格中滚动时,会连续引发LoadingRow事件。因此在LoadingRow方法中不能放置耗时的代码。
后台代码:
public partial class MainWindow : Window
public MainWindow()
InitializeComponent();
this.Loaded += MainWindow_Loaded;
Bll.ProductBll productBll = App.ProductBll;
void MainWindow_Loaded(object sender, RoutedEventArgs e)
this.dataGrid1.ItemsSource = productBll.GetCollectionProduct2();
//突出背景。
private SolidColorBrush highLightBrush = new SolidColorBrush(Colors.Orange);
//默认背景。
private SolidColorBrush defaultlBrush = new SolidColorBrush(Colors.White);
/// <summary>
/// LoadingRow事件。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
//将行对象转换成Product对象。
Models.Product product = (Models.Product)e.Row.DataContext;
//如果价钱大于5就为每一行设置背景色为橘黄色。
if (product.ProPrice > 5)
e.Row.Background = highLightBrush;
//设置行背景色为白色。
e.Row.Background = defaultlBrush;
catch (Exception)
3.6)、显示行细节(RowDetailsTemplate)。
可通过设置RowDetailsVisibilityMode属性来配置行细节区域的显示行为。默认情况下是VisibleWhenSelected,如果设置成Visible就会立即可看到。
xaml代码:
<DataGrid Name="dataGrid1" LoadingRow="dataGrid1_LoadingRow">
<!--RowDetailsTemplate模板 -->
<DataGrid.RowDetailsTemplate>
<DataTemplate>
<Border Margin="10" Padding="10" BorderBrush="SteelBlue" BorderThickness="3" CornerRadius="5">
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding Path=ProId}"></TextBlock>
<TextBlock Grid.Column="1" Text="{Binding Path=ProName}"></TextBlock>
<TextBlock Grid.Column="2" Text="{Binding Path=ProPrice, StringFormat={}{0:C}}"></TextBlock>
<Image Grid.Column="3" Width="50" Height="50" VerticalAlignment="Top">
<Image.Source>
<Binding Path="ProImagePath">
<Binding.Converter>
<local:ImagePathConverter></local:ImagePathConverter>
</Binding.Converter>
</Binding>
</Image.Source>
</Image>
</Grid>
</Border>
</DataTemplate>
</DataGrid.RowDetailsTemplate>
</DataGrid>
View Code
后台代码不变,效果图:
3.7)、冻结列。
用FrozenColumnCount属性表示。如果设置FrozenColumnCount 属性 = 1,就说明是第1列被冻结了。
<!--设置DataGrid的第1列为冻结。-->
<DataGrid Name="dataGrid1" LoadingRow="dataGrid1_LoadingRow" RowDetailsVisibilityMode="VisibleWhenSelected" FrozenColumnCount="1">
3.8)、选择。
与普通的列表控件类似,DataGrid控件允许用户选择单个项,当选择一项时,可以响应SelectionChanged事件。为找到当前选择的数据对象,可使用SelectedItem属性。如果希望用户能够选择多行,可将SelectionMode属性设置为Extended(默认是Single),为了选择多行,用户必须按下shift或Ctrl键,可从SelectedItems属性中检索选项的集合。
xaml代码:
<!--DataGrid 的SelectionChanged事件。-->
<DataGrid Name="dataGrid1" SelectionChanged="dataGrid1_SelectionChanged"> </DataGrid>
</Grid>