您的当前位置:首页正文

DataGrid的用法

2021-06-11 来源:小奈知识网


前几天打算尝试下DataGrid的用法,起初以为应该很简单,可后来被各种使用方法和功能实现所折磨。网络上的解决方法太多,但也太杂。没法子,我只好硬着头皮阅览各种文献资料,然后不断的去尝试,总算小有成果。因此,把我学到的和大家分享一下,相信这篇文章会让你再很短的时间内学会DataGrid的大部分主要功能,而且很多难点都可以在里面找到解决方案。

由于涉及的应用比较多,所以篇幅会很长。但可以确保各个版块相互独立,总共4个部分

1.数据绑定

2.DataGrid的增改删功能

3.DataGrid的分页实现

4.DataGrid的样式设计

先上一张截图,让你大概知道自己需要的功能是否在这张图里有所实现。

PS:使用技术:WPF + ADO.NET Entity Framework

1.数据绑定(涉及DataGrid绑定和Combox绑定)

在DataGrid 中同时包含“自动生成列”与“用户自定义列” 由属性AutoGenerateColumns控制。

默认情况下, DataGrid 将根据数据源自动生成列。 下图列出了生成的列类型。

如果AutoGenerateColumns=\"True\" ,我们只需要如下几行代码

后台dataGrid1.ItemsSource = infoList; //infoList为内容集合(这是我从数据库中获取的记录集合 类型为List

PS:因为这里给dataGrid1绑定了数据源,所以下面绑定的字段都是infoList中的字段名称,同样也对应着我数据表中的字段名。里面包含FID,公司名称,职员姓名,性别,年龄,职务。解释下,怕大家无法理解Binding 后面的值是如何来的了

显然这种数据绑定非常的容易,如果对表格要求不高,这中无疑是最简单方便的。

如果AutoGenerateColumns=\"False\" 表格字段的显示就要靠我们手动去完成了。这个也是数据绑定的重点,因为实际应用中我们大多都是自定义去完成DataGrid的数据绑定。

接下来贴出代码(后面的所有功能都可以在此代码基础上添加和修改)

[html] view plaincopyprint?

1. 2. xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"

3. xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"

4. xmlns:assembly=\"clr-namespace:System;assembly=mscorlib\"

5. xmlns:local=\"clr-namespace:Demo\"

6. Title=\"MainWindow\" Loaded=\"Window_Loaded\">

7.

8. ObjectType=\"{x:Type assembly:Enum}\">

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

Header=\"

公称

司名,

称\" Width=\"80\"

Mode=TwoWay,

UpdateSourceTrigger=PropertyChanged}\"/>

25.

26.

}\"

Header=\"sex\"

ItemsSource=\"{Binding

Source={StaticResource keySex}}\"/>

27.

28.

29.

30.

31.

32.

33.

后台 [csharp] view plaincopyprint? 1. namespace Demo{ 2. ///

3. /// MainWindow.xaml 的交互逻辑 4. /// 5. public enum Sex { 男,女 }; //注意 写在命名空间内 ,不要写在类里,否则台前local:Sex找不到路径 6. } public enum Sex { 男,女 }; //注意 写} 当我们绑定好数据运行程序的时候,会发现 DataGridComboBoxColumn下拉框里虽然绑定了值,但是他不会默认显示出已经设定好的值。所以我们就可以摈弃这种现有

的 DataGridComboBoxColumn,我们用DataGrid样板标签

DataGridTemplateColumn。

我们在DataGridTemplateColumn标签里要用到2个控件,一个 TextBlock控件来显示内容,另一个ComBox来提供选择。

所以我们可以用如下代码替换掉

}\"

Header=\"sex\"

ItemsSource=\"{Binding

Source={StaticResource keySex}}\"/>

[html] view plaincopyprint?

1.

2.

3.

4.

5.

6.

7. 8. 9. 10. 11. 12. 注意 CellTemplate和 CellEditingTemplate的区别 2.DataGrid的增改删功能 ①添加记录行+编辑记录行 由于增加和编辑有一定的联系,所以就放一起来讨论

在上面的代码处添加2个Button按钮,DataGrid默认是输入一行记录后自动会生成一个新行(类似MSSQL数据库添加表记录)。由属性 CanUserAddRows来控制 当 CanUserAddRows=false的时候就不会自动生成新行。为了方便我们自己来控制,所以在DataGrid里面设置CanUserAddRows为false. [html] view plaincopyprint? 1. 2.