- 浏览: 50184 次
- 性别:
- 来自: 厦门
文章分类
最新评论
DataGrid是WPF中的数据显示控件,相当于Winform中的DataGridView。但是两者之间的用法确存在一些差异。在文档中,如果利用两者的不同之处可以更加清楚的描述好DataGrid的使用,我将采用该种方法。好了我们首先看一下如何为DataGrid指定数据源吧!
我们知道在Winform中DataGridView的数据源可以是DataTable,DataView,List<T>等,但是在WPF中DataGrid的数据源不能直接为DataTable。作为DataGrid的数据源的对象必须实现了IEnumerable接口的,至于你们是否怀疑DataGrid的数据源真的不能直接指定为DataTable?那最好是自己去尝试一下。因为求知就得如此。我是试过了哈!如果你真的要将DataTable指定给DataGrid。那么你可以采用以下方法:this.dataGrid.ItemSource = dt.DefaultView;这里的dt是你创建的DataTable对象。你注意到了吗?先前我们使用的诸如DataGridView,ComboBox,Web中的GridView等数据显示控件在指定数据源时都是为其属性DataSource指定数据源对象。但是WPF中的DataGrid却不是这样,我开始接触的时候按照自己的思维方式去找寻DataSource属性,可未成功!查阅资料才知道是ItemSource属性。所以请注意了!
我们在使用DataGrid控件时,可以直接将数据源对象指定给DataGrid的ItemSource属性。此时数据显示将按照数据源的数据结构进行数据显示。如果你需要根据你自己定义的方式显示数据,此时需要借助于代码定义样式了!DataGrid的整体外观我们可以通过设置DataGrid的属性来体现,也可以通过Style来体现。如利用DataGrid的HeadersVisibility设置头或列是否显示,该属性有三个值,分别的含义是:None 表示列头和行头都不显示; All 表示列头和行头都显示; Row表示行头显示; Column 表示列头显示;利用DataGrid的RowBackgroud属性设置行的背景色等等。我们也可以利用设置DataGrid的Style来控制DataGrid的外观样式。如利用DataGrid.ColumnHeaderStyle来设置DataGrid的列头显示样式,示例代码如下:
<DataGrid.ColumnHeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Color="White" Offset="0"/> <GradientStop Color="Yellow" Offset="0.5"/> <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Foreground" Value="Black"/> <Setter Property="FontSize" Value="13" /> </Style> </DataGrid.ColumnHeaderStyle>
以上代码分别对DataGrid的列头的背景色、前景色和字体做了设置。其中在设置背景色时,利用了(LinearGradientBrush)使其背景色呈渐变效果。
利用DataGrid.RowHeaderStyle来设置DataGrid的行头显示样式,示例代码如下:
<DataGrid.RowHeaderStyle> <Style TargetType="DataGridRowHeader"> <Setter Property="Content" Value=" •¤"/> <Setter Property="Width" Value="10"/> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="1,1"> <GradientStop Color="White" Offset="0"/> <GradientStop Color="SkyBlue" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="ToolTip" Value="选中该行"/> </Trigger> </Style.Triggers> </Style> </DataGrid.RowHeaderStyle>
看着这些代码,与刚刚的ColumnHeaderStyle的代码大同小异,在此我想说的是其中的Style.Trigger节点,该节点顾名思义可以理解为触发器。在以上代码中表示当鼠标移动到行头上方时,将提示"选中该行"
在对于列头的样式定义中,以上方法是对所有列进行的全局定义。如果你需要将特殊位置的列显示为特殊样式,那么你可以对该列进行单独的样式定义,方法如下:
<DataGridTextColumn Header="编号" Binding="{Binding Path=ID}"> <DataGridColumn.HeaderStyle> <Style TargetType="DataGridColumnHeader"> <Setter Property="Background"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Color="White" Offset="0"/> <GradientStop Color="SkyBlue" Offset="0.5"/> <GradientStop Color="White" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="Foreground" Value="Black"/> <Setter Property="FontSize" Value="13"/> <Setter Property="Width" Value="100"/> <Style.Triggers> <Trigger Property="IsMouseOver" Value="True"> <Setter Property="ToolTip" Value="按照该列进行排序"/> </Trigger> </Style.Triggers> </Style> </DataGridColumn.HeaderStyle> </DataGridTextColumn>
在该段代码中,DataGridTextColumn代表该列以文本的形式显示,同时显示的数据为您所指定数据源的ID这个字段的数据。在这里我们提到了DataGridTextColumn使其内容按照文本的形式显示,在WPF中提供了四种基本的列显示样式:
DataGridTextColumn 文本显示内容,指定的数据类型为String
DataGridCheckBoxColumn 复选框的形式显示内容,指定的数据类型为Boolean
DataGridComboBoxColumn 下拉列表的形式显示内容,指定的数据类型为Enum
DataGridHyperlinkColumn 超链接的形式显示内容,指定的数据类型为Uri
往往我们在实际的开发中,以上四种样式并不能完全满足我们的需求,此时我们可以利用DataGridTemplateColumn来自定义显示样式,示例如下:
在使用DataGridTemplateColumn时,我们必须先定义DataTemplate:
<Window.Resource> <DataTemplate x:Key="BirthTemplate"> <StackPanel Width="200" Height="20"> <Border Background="Orange" BorderBrush="Black" BorderThickness="1"> <TextBlock Text="{Binding Birthday, StringFormat={}{0:MM-dd}}" FontSize="13" HorizontalAlignment="Center"/> </Border> <Border Background="White" BorderBrush="Black" BorderThickness="1"> <TextBlock Text="{Binding Birthday, StringFormat={}{0:yyyy}}" FontSize="13" HorizontalAlignment="Center"/> </Border> </StackPanel> </DataTemplate> <DataTemplate x:Key="EditingDateTemplate"> <DatePicker SelectedDate="{Binding Birthday}"/> </DataTemplate> </Window.Resource>
使用以上样式:
<DataGridTemplateColumn Header="出生日期" Width="100" CellTemplate="{StaticResource BirthTemplate}" CellEditingTemplate="{StaticResource EditingDateTemplate}"/>
发表评论
-
获取WPF所有控件的模板内容
2013-04-03 15:13 10321. 首先创建XMAL文件 <Windo ... -
委托回调函数的妙用(c# code )
2013-04-03 15:14 1434//person类 public class ... -
DynamicResource与StaticResource的区别
2013-02-20 14:28 0DynamicResource与StaticRes ... -
依赖属性--WPF
2013-02-20 14:27 0/// <summary> / ... -
简单的上传图片
2013-02-20 14:26 0<%@ Page Title="" ... -
C#获取文件夹下所有文件
2013-02-20 14:25 0string fileInfo = string.Empty ... -
如何将input type="file"显示的"浏览" 变成英文的?
2013-02-20 14:25 0解决方法: 方法一:使用英文Windows系统(这 ... -
asp.net mvc 2.0相关的一些内容
2013-02-20 14:24 01.搜索用到ViewTemp[]的时候,要用COOKIE去 ... -
WPF datagrid 弹出右键菜单时先选中该项
2013-02-20 14:23 0privatevoid datagrid_Previ ... -
显示动态的大小写提示框
2013-02-20 14:18 0function detectCapsLock(event) ... -
C# Action<T> 使用
2013-02-20 14:18 0在使用 Action<T> ... -
字符串SubCutString
2013-02-20 14:15 761public static string SubCutStr ... -
正则表达式-关于字符在100以内的字
2013-02-20 14:15 1137^.{0,100} $ 关于字符在100以内的字 ... -
WPF,TextBlock ,ToolTip 显示
2013-02-20 14:14 1154<TextBlock Text="{Bind ... -
后台运行点击事件
2013-02-20 14:13 623button.RaiseEvent(new Route ... -
为你解惑之WPF经典9问详解 .
2013-01-08 15:20 1222第0问:能否简单介绍一 ... -
WPF中TreeView的使用 .
2013-01-08 15:21 2183不管是在窗体程序开发还是在web应用程序开发中,大家都知道树这 ... -
浅谈WPF中x名称空间(二) .
2012-04-13 13:43 1179二、x名称空间中的标记 ... -
浅谈WPF中x名称空间(一) .
2012-04-13 13:22 1103不知道各位同行在创建第一个WPF应用程序时,由编译器自动 ... -
C#正则表达式
2012-04-13 12:41 833(1)“@”符号符下两ows表研究室的火热,当晨在“@”虽然并 ...
相关推荐
关于vs2010中c#的WPF应用。DataGrid是个很好的应用。
原创资源,请不要重新上传,让我赚点分数- -! 实现功能:WPF下DataGrid实现行单元格合并,有任何疑问请联系loonylins@126.com
wpf datagrid实现树结构
WPF中DataGrid里面的Checkbox实现单选关键代码, 文档里面的代码复制粘贴即可实现!本人也是项目需要写的一个功能11行代码实现此功能! 希望可以帮助到你们!
WPF之DataGrid使用示例WPF之DataGrid使用示例WPF之DataGrid使用示例
实现了数据的双向绑定,更改DataGrid的数据会更新后台数据,更改后台数据会在DataGrid上实时显示。
wpf中datagrid动态设置单元格背景颜色。
WPF中DataGrid自定义实现最后一行下面跟一个汇总行,类似MT4
使用MVVM模式对WPF中的DataGrid控件动态添加列,并实现了编辑模式。
在WPF的 DataGrid控件中显示图片的小例子
本程序实现功能: 1.DataGrid数据的显示、修改与保存 2.DataGrid数据导入Excel
private void daochu_Click(object sender, ... if (dataGrid.Columns[i].Visibility == System.Windows.Visibility.Visible)//只导出可见列 { dt.Columns.Add(dataGrid.Columns[i].Header.ToString());//构建表头
wpf通过datagrid操作数据库,实现datagrid增删改操作。
本例子是wpf中datagrid的增加修改,对于datagrid中的canuseraddrows=true,对当前空白行进行的添加数据,修改时,鼠标离开焦点可自动更新数据库,删除等等。不需要多余的界面进行添加修改等,利用datagrid的属性,...
在"WPF分页DataGrid"中介绍了如何实现分页功能,本文中介绍如果实现右键菜单。点击菜单项Age,将Age列隐藏,再点击则显示;并实现移动列后,同步显示。 详见:...
利用微软的MVVM开发模式,方便高效的使用DataGrid控件实现功能。
WPF MVVM DataGrid分页案例 运用数据绑定 Command 可作为MVVM学习使用
WPF中DataGrid得到其中一行的值
结合实例很好的讲解了DataGrid中数据绑定,与数据操作即增删改查,还有分页功能。适合初学者快速的掌握DataGrid 的典型应用
DataGrid的demo测试,主要是自动调整行高。