WPFDataGrid控件使用

需要注意的是,datagrid控件有一个属性是AutoGenerateColumns,这个属性默认是ture,也就意味着,如果你为datagrid绑定数据时,不指定具体的数据表项
WPF会自动根据你所绑定的变量名称设置表项,但是为了可定制性,我们一般情况下都会将其设置为false,今天由于没有注意到这个问题,显示时名字又恰好跟变量名字
设置为一样了,结果悲剧的显示了重复的列,纠结了大半天,才发现是这个问题导致的。╮(╯Д╰)╭
xaml文件中的内容如下所示,
1
<Window x:Class="InputAndUpdate.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 2 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 3 xmlns:Collections="clr-namespace:System.Collections;assembly=mscorlib" 4 xmlns:System="clr-namespace:System;assembly=mscorlib" 5 xmlns:DataProvider="clr-namespace:InputAndUpdate.DataProvider" 6 Title="MainWindow" Height="350" Width="525" 7 Loaded="Window_Loaded_1"> 8 <!--在这里需要注意的是,我们在将转换器引入时,有可能会一直报,在命名空间内没有GenderConverter的情况,这时我们需要做的就是 9 将整个工程清理,并重新生成,执行这一步可以解决很多的这类问题 10 --> 11 <Window.Resources> 12 <DataProvider:GenderConverter x:Key="converter"></DataProvider:GenderConverter> 13 </Window.Resources> 14 <Grid> 15 <TextBox Name="myBox" Width="200" Margin="148,27,169,262" /> 16 <!--这里如果我们要显示的数据很多,则可以采用列冻结,也就是说无论我们怎么移动,我们要冻结的列总是显示在它初始化时所在的列,另外在datagrid中 17 表头之间是可以相互调换位置的,如果采用冻结表格也就意味着,不能调换位置了--> 18 <DataGrid Width="500" Margin="8,82,9,35" AutoGenerateColumns="False" Name="personInfoDG" FrozenColumnCount="1"> 19 <!--设置鼠标悬浮所在行的颜色--> 20 <DataGrid.RowStyle> 21 <Style TargetType="DataGridRow"> 22 <Style.Triggers> 23 <Trigger Property="IsMouseOver" Value="True"> 24 <Setter Property="Background" Value="Blue"/> 25 </Trigger> 26 </Style.Triggers> 27 </Style> 28 </DataGrid.RowStyle> 29 <!--设置显示信息,当单击某一行时,会在行的下面出现你所定义的显示形式和显示内容--> 30 <DataGrid.RowDetailsTemplate> 31 <DataTemplate> 32 <Border Margin="10" Padding="10" BorderBrush="SteelBlue" BorderThickness="3" CornerRadius="5"> 33 <TextBlock Text="{Binding Phonenumber}" FontSize="10"></TextBlock> 34 </Border> 35 </DataTemplate> 36 </DataGrid.RowDetailsTemplate> 37 <DataGrid.Columns> 38 <DataGridTextColumn Header="联系人姓名" Binding="{Binding Name}" IsReadOnly="True"> 39 <DataGridTextColumn.HeaderStyle> 40 <Style TargetType="DataGridColumnHeader"> 41 <Setter Property="FontWeight" Value="Bold"></Setter> 42 <Setter Property="Foreground" Value="Red"></Setter> 43 </Style> 44 </DataGridTextColumn.HeaderStyle> 45 </DataGridTextColumn> 46 <!--绑定数据的时候,如果需要在绑定数据的同时,绑定转换器,只需添加一个逗号即可。--> 47 <DataGridTextColumn Header="性别" Binding="{Binding Sex,Converter={StaticResource converter}}" IsReadOnly="True"></DataGridTextColumn> 48 <DataGridTextColumn Header="手机号码" Binding="{Binding Phonenumber}" 49 IsReadOnly="True"></DataGridTextColumn> 50 <!--测试使用comboxcolumn--> 51 <DataGridComboBoxColumn Header="性别" SelectedItemBinding="{Binding Sex}"> 52 <DataGridComboBoxColumn.ItemsSource> 53 <Collections:ArrayList> 54 <System:String>男</System:String> 55 <System:String>女</System:String> 56 </Collections:ArrayList> 57 </DataGridComboBoxColumn.ItemsSource> 58 </DataGridComboBoxColumn> 59 </DataGrid.Columns> 60 </DataGrid> 61 </Grid> 62 </Window>
主窗体后台代码
 1 using System.Collections.Generic;
 2 using System.Windows;
 3 using System.Windows.Controls;
 4 using InputAndUpdate.DataProvider;
 5 
 6 namespace InputAndUpdate
 7 {
 8     /// <summary>
 9     /// MainWindow.xaml 的交互逻辑
10     /// </summary>
11     public partial class MainWindow : Window
12     {
13         public MainWindow()
14         {
15             InitializeComponent();
16             this.myBox.TextChanged += myBox_TextChanged;
17             this.personInfoDG.MouseDoubleClick += personInfoDG_MouseDoubleClick;
18         }
19 
20         void personInfoDG_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
21         {
22             //datagrid鼠标监听获得的是你所绑定的整个对象
23             DataGrid datagrid = sender as DataGrid;
24             Person person = (sender as DataGrid).SelectedItem as Person;
25         }
26 
27        
28         /*
29          * textbox监听事件,当textbox内容发生改变时触发如下事件,进行
30          * datagrid数据的更新
31          */
32         void myBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
33         {
34 
35             string phoneNumber = (sender as TextBox).Text;
36             string queryStatement = "select * from personinfo where phonenumber like \"%" + phoneNumber + "%\"";
37            List<Person> personlist = DataProvider.DataProvider.query(queryStatement);
38             personInfoDG.ItemsSource = personlist;
39         }
40         /*
41          * 主窗体加载时,初始化datagrid
42          */
43         private void Window_Loaded_1(object sender, RoutedEventArgs e)
44         {
45             string queryStatement = "select * from personinfo";
46             List<Person> personlist = DataProvider.DataProvider.query(queryStatement);
47             personInfoDG.ItemsSource = personlist;
48         }
49     }
50 }

 


转换器源码
 1 using System;
 2 using System.ComponentModel;
 3 
 4 namespace InputAndUpdate.DataProvider
 5 {
 6     public class Person : INotifyPropertyChanged
 7     {
 8         private string name { set; get; }
 9         private string sex { set; get; }
10         private string phonenumber { set; get; }
11 
12         public string Name
13         {
14             set
15             {
16                 name = value;
17                 NotifyPropertyChanged("Name");
18             }
19             get { return name; }
20         }
21 
22         public string Sex
23         {
24             set
25             {
26                 sex = value;
27                 NotifyPropertyChanged("Sex");
28             }
29             get { return sex; }
30         }
31 
32         public string Phonenumber
33         {
34             set
35             {
36                 phonenumber = value;
37                 NotifyPropertyChanged("Phonenumber");
38             }
39             get { return phonenumber; }
40         }
41 
42         #region INotifyPropertyChanged Members
43 
44         public event PropertyChangedEventHandler PropertyChanged;
45 
46         #endregion
47 
48         private void NotifyPropertyChanged(String propertyName)
49         {
50             if (PropertyChanged != null)
51             {
52                 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
53             }
54         }
55     }
56 }

 

 

posted @ 2013-03-30 13:51  dependmyse  阅读(233)  评论(0)    收藏  举报