网站导航免费论文 原创论文 论文搜索 作业答案 网学软件 学术大家 资料中心 会员中心 问题解答 定作论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 设计资源 > Silverlight > 正文
DataGrid相关的几个小知识点
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 10/07/26

1 、列标题居中。
可以通过设置DataGridColumn的HeadStyle实现,HeadStyle的XAML代码如下:

  1. <Style x:Key="DataGridHeaderStyle" TargetType="Primitives:DataGridColumnHeader"> 
  2.      <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
  3. </Style> 

2、根据绑定实体的属性值不同呈现不同的外观(例如,将年龄小于18岁的标记为红色)。
可以使用DataGridTemplateColumn + 自定义转换器实现。
列的XAML代码如下:

  1. <data:DataGridTemplateColumn Header="Age"  Width="80"> 
  2.     <data:DataGridTemplateColumn.CellTemplate> 
  3.         <DataTemplate> 
  4.             <TextBlock Text="{Binding Age}" VerticalAlignment="Center"  
  5.                 Foreground="{Binding Age, Converter={StaticResource converter}}"></TextBlock> 
  6.         </DataTemplate> 
  7.     </data:DataGridTemplateColumn.CellTemplate> 
  8. </data:DataGridTemplateColumn> 

你可能会想到通过绑定DataGridTextColumn的Foreground属性实现同样的功能,遗憾的是,DataGridTextColumn的Foreground属性并不是依赖项属性,因此绑定到该属性是不可以的。
自定义转换器的代码(注:由于是单向绑定,只实现了Convert方法)如下:

  1. public class AgeConverter : IValueConverter 
  2.     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
  3.     { 
  4.         int age = (int)value; 
  5.         Color color = age < 18 ? Colors.Red : Colors.Black; 
  6.         return new SolidColorBrush(color); 
  7.     } 
  8.  
  9.     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
  10.     { 
  11.         throw new NotImplementedException(); 
  12.     } 

3、动态控制模板列中控件的属性。
使用场景:例如使用DataGrid对员工档案进行展示或编辑,为了方便的删除员工档案,为DataGrid添加包含“删除”按钮的模板列。当展示员工档案时,DataGrid的IsReadOnly属性为true,当编辑员工档案时,DataGrid的IsReadOnly属性为false。但是,“删除”按钮的可用性并不会随着DataGrid的IsReadOnly属性的改变而改变,需要我们用代码动态控制。(注:如果设置DataGrid的IsEnabled属性为false,按钮是不可用的,但DataGrid不可滚动,并不适合查看数据)
解决方案:可以在资源中添加一个按钮,便于我们的代码访问并设置按钮的属性;然后将模板列中按钮的属性绑定到资源中的按钮的相应属性上,这样便可以通过设置资源中按钮的属性实现设置模板列中按钮的属性。与该做法类似的,也可以自定义一个包含要设置的控件的属性并实现INotifyPropertyChanged接口的类,然后在资源中添加该类的实例,然后在代码中通过设置资源中该类的实例的属性实现设置模板列中按钮的属性。

以上三点的完整示例如码如下:
DataGridSample.xaml

  1. <UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="AutoCompleteBoxSample.DataGridSample" 
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.     xmlns:Primitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"  
  5.     xmlns:local="clr-namespace:Sample" Width="400" Height="300"> 
  6.     <UserControl.Resources> 
  7.         <Button x:Key="deleteButtonTemplate"></Button> 
  8.          
  9.         <local:AgeConverter x:Key="converter"></local:AgeConverter> 
  10.  
  11.         <Style x:Key="DataGridHeaderStyle" TargetType="Primitives:DataGridColumnHeader"> 
  12.             <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
  13.         </Style> 
  14.  
  15.     </UserControl.Resources> 
  16.     <Grid x:Name="LayoutRoot" Background="White"> 
  17.         <Grid.RowDefinitions> 
  18.             <RowDefinition Height="Auto"></RowDefinition> 
  19.             <RowDefinition Height="*"></RowDefinition> 
  20.         </Grid.RowDefinitions> 
  21.         <Button Content="ChangeReadonly" Click="ChangeReadOnly" Margin="0,10" ></Button> 
  22.         <data:DataGrid Name="dg" Grid.Row="1" AutoGenerateColumns="False" > 
  23.             <data:DataGrid.Columns> 
  24.                 <data:DataGridTextColumn Binding="{Binding Code}" HeaderStyle="{StaticResource DataGridHeaderStyle}" 
  25.                     Header="Code"  Width="80" > 
  26.                 </data:DataGridTextColumn> 
  27.                 <data:DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="120" /> 
  28.                 <data:DataGridTemplateColumn Header="Age"  Width="80"> 
  29.                     <data:DataGridTemplateColumn.CellTemplate> 
  30.                         <DataTemplate> 
  31.                             <TextBlock Text="{Binding Age}" VerticalAlignment="Center"  
  32.                                 Foreground="{Binding Age, Converter={StaticResource converter}}"></TextBlock> 
  33.                         </DataTemplate> 
  34.                     </data:DataGridTemplateColumn.CellTemplate> 
  35.                 </data:DataGridTemplateColumn> 
  36.                 <data:DataGridTemplateColumn x:Name="cl1" Header="Delete"> 
  37.                     <data:DataGridTemplateColumn.CellTemplate> 
  38.                         <DataTemplate> 
  39.                             <Button Name="btnDel" Content="Delete" DataContext="{StaticResource deleteButtonTemplate}"  
  40.                                     IsEnabled="{Binding IsEnabled}" Click="Delete"  ></Button> 
  41.                         </DataTemplate> 
  42.                     </data:DataGridTemplateColumn.CellTemplate> 
  43.                 </data:DataGridTemplateColumn> 
  44.             </data:DataGrid.Columns> 
  45.         </data:DataGrid>         
  46.     </Grid> 
  47. </UserControl> 

DataGridSample.xaml.cs

  1. public partial class DataGridSample : UserControl 
  2.     public DataGridSample() 
  3.     { 
  4.         InitializeComponent(); 
  5.  
  6.         this.dg.ItemsSource = this.bll.EmployeeList; 
  7.     } 
  8.  
  9.     private EmployeeBll bll = new EmployeeBll(); 
  10.  
  11.     private void ChangeReadOnly(object sender, RoutedEventArgs e) 
  12.     { 
  13.         this.dg.IsReadOnly = !this.dg.IsReadOnly; 
  14.  
  15.         (this.Resources["deleteButtonTemplate"as Button).IsEnabled = !this.dg.IsReadOnly; 
  16.     } 
  17.  
  18.     private void Delete(object sender, RoutedEventArgs e) 
  19.     { 
  20.         MessageBox.Show("Delete"); 
  21.     } 
  22.  
  23. public class AgeConverter : IValueConverter 
  24.     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
  25.     { 
  26.         int age = (int)value; 
  27.         Color color = age < 18 ? Colors.Red : Colors.Black; 
  28.         return new SolidColorBrush(color); 
  29.     } 
  30.  
  31.     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
  32.     { 
  33.         throw new NotImplementedException(); 
  34.     } 

Employee.cs

  1. public class Employee 
  2.     public string Code { getset; } 
  3.     public string Name { getset; } 
  4.     public int Age { getset; } 
  5.  
  6.  
  7.     public override string ToString() 
  8.     { 
  9.         return Name; 
  10.     } 
  11.  
  12. public class EmployeeBll 
  13.     public EmployeeBll() 
  14.     { 
  15.         this.employeeList = new List<Employee>(); 
  16.         this.employeeList.Add(new Employee { Code = "001", Name = "Mike", Age = 16 }); 
  17.         this.employeeList.Add(new Employee { Code = "002", Name = "John", Age = 18 }); 
  18.         this.employeeList.Add(new Employee { Code = "003", Name = "Rose", Age = 20 }); 
  19.  
  20.     } 
  21.  
  22.     private List<Employee> employeeList; 
  23.  
  24.     public List<Employee> EmployeeList 
  25.     { 
  26.         get { return this.employeeList; } 
  27.     } 

示例的运行效果:

image

  • 下一篇资讯: Silverlight中的数据访问
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号