强大的DataGrid组件[7]_自定义DataGrid——Silverlight学习笔记[15]
基本知识讲解
1)两种状态
DataGrid的单元格的状态有两类,即编辑状态和非编辑状态。
在实际开发中,如果一个单元格所在的列不设为只读的话(即要求可读写),那么这个单元格就存在这两种状态。按需要,这时就应当对这两种状态对单元格分别设定不同的编辑模板。如果该单元格仅用于进行简易的文本编辑,则可保留原有状态,无需重新设定。
这两种编辑模板的标签如下所示:
①非编辑状态模板:<data:DataGridTemplateColumn.CellTemplate>
②编辑状态模板:<data:DataGridTemplateColumn.CellEditingTemplate>
2)三种模板
①<data:DataGridTextColumn>
普通文本列,即基本默认设置
②<data:DataGridCheckBoxColumn>
带有复选框的列,当该列单元格数据的值为true或false、1或0时,将该列的模板设定。
③<data:DataGridTemplateColumn>
自定义模板列,这个是功能最强的可以放入任何自定义控件。
关于绑定
如果单元格所在列无需编辑或只读的话,绑定模式设定为默认的OneWay即可。如果该列需要进行编辑,就请将绑定模式设为TwoWay。
更为详细的说明请参见MSDN的文章。(点这里)
实例
说明:为了能自定义列,我们需要先将DataGrid的AutoGenerateColumns属性设为false。
MainPage.xaml文件代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
< UserControl xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:src = "clr-namespace:SilverlightClient" mc:Ignorable = "d" xmlns:data = "clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class = "SilverlightClient.MainPage" d:DesignWidth = "320" d:DesignHeight = "240" > < UserControl.Resources > <!--静态资源绑定--> < src:cbSexListProvider x:Key = "cbSexListProvider" ></ src:cbSexListProvider > </ UserControl.Resources > < Grid x:Name = "LayoutRoot" Background = "White" Width = "320" Height = "240" > < data:DataGrid x:Name = "dgCustom" Margin = "8,8,8,42" AutoGenerateColumns = "False" FontSize = "14" > < data:DataGrid.Columns > < data:DataGridTextColumn Header = "编号" IsReadOnly = "True" Binding = "{Binding EmployeeID,Mode=OneWay}" /> <!--该列只读--> < data:DataGridTextColumn Header = "名称" Binding = "{Binding EmployeeName,Mode=TwoWay}" /> < data:DataGridTextColumn Header = "年龄" Binding = "{Binding EmployeeAge,Mode=TwoWay}" /> < data:DataGridTemplateColumn Header = "性别" Width = "80" > < data:DataGridTemplateColumn.CellTemplate > <!--普通显示模式--> < DataTemplate > < TextBlock Text = "{Binding EmployeeSex}" ></ TextBlock > </ DataTemplate > </ data:DataGridTemplateColumn.CellTemplate > < data:DataGridTemplateColumn.CellEditingTemplate > <!--编辑模式--> < DataTemplate > < ComboBox Width = "80" ItemsSource = "{Binding cbSexList,Source={StaticResource cbSexListProvider}}" SelectedItem = "{Binding EmployeeSex,Mode=TwoWay}" /> </ DataTemplate > </ data:DataGridTemplateColumn.CellEditingTemplate > </ data:DataGridTemplateColumn > < data:DataGridCheckBoxColumn Header = "婚否" Binding = "{Binding EmployeeMarried,Mode=TwoWay}" /> </ data:DataGrid.Columns > </ data:DataGrid > </ Grid > </ UserControl > |
MainPage.xaml.cs文件代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightClient { //静态资源绑定源 public class cbSexListProvider { public List< string > cbSexList { get { return new List< string > { "男", "女" }; } } } //定义数据类 public class Employees { public int EmployeeID { get; set; } public string EmployeeName { get; set; } public int EmployeeAge { get; set; } public string EmployeeSex { get; set; } public int EmployeeMarried { get; set; } } public partial class MainPage : UserControl { List< Employees > em = new List< Employees >(); public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { em.Add(new Employees() { EmployeeID = 1, EmployeeName = "张三", EmployeeAge = 23, EmployeeSex = "男", EmployeeMarried = 0 }); em.Add(new Employees() { EmployeeID = 2, EmployeeName = "李四", EmployeeAge = 24, EmployeeSex = "女", EmployeeMarried = 1 }); em.Add(new Employees() { EmployeeID = 3, EmployeeName = "王五", EmployeeAge = 25, EmployeeSex = "男", EmployeeMarried = 1 }); dgCustom.ItemsSource = em; } } } |
最终效果图:
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
强大的DataGrid组件[7]_自定义DataGrid——Silverlight学习笔记[15]的更多相关文章
- Hive自定义函数的学习笔记(1)
前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...
- 第2课第3节_Java面向对象编程_继承性_P【学习笔记】
摘要:韦东山android视频学习笔记 面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...
- jQuery 自定义事件的学习笔记
jquery中提供了两种方法可以绑定自定义事件: bind()和one()而绑定的自定义事件的触发,必须得用jquery中的trigger()方法才能触发. 我们先来看on事件 代码如下 复制代码 ...
- ArcGIS API for JavaScript 4.2学习笔记[15] 弹窗内容的格式与自定义格式
先看结果截图吧(不看过程可以直接看总结,在文末): 随便点击了两个城市斑块,出现结果如图. 我来解读一下这结果和以前的有什么不同: 这个例子使用了PopupTemplate,数据是Layer(使用Po ...
- python基础课程_学习笔记15:标准库:有些收藏夹——fileinput
标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...
- MySQL语法大全_自己整理的学习笔记(MySQL语句 整理二)
select * from emp; #注释 #--------------------------- #----命令行连接MySql--------- #启动mysql服务器 net start m ...
- jQuery源码分析_工具方法(学习笔记)
expando:生成唯一JQ字符串(内部使用) noConflict():防止冲突 isReady:DOM是否加载完成(内部) readyWait:等待多少文件的计数器(内部) holdReady() ...
- 第2课第7节_Java面向对象编程_内部类_P【学习笔记】
摘要:韦东山android视频学习笔记 1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...
- 第2课第5节_Java面向对象编程_异常_P【学习笔记】
摘要:韦东山android视频学习笔记 java的异常处理的原则如下: 1.我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问 ...
随机推荐
- Cow Exhibition (01背包)
"Fat and docile, big and dumb, they look so stupid, they aren't much fun..." - Cows with G ...
- oracle sqlplus 导出csv文件
et colsep , set feedback off set heading off set trimout on spool D:\DBoracle\lfc.csv select '" ...
- HackerRank# Wet Shark and Two Subsequences
原题地址 对于给定的两个约束条件,可以通过联立方程组直接解出子序列A的和和子序列B的和,即sum(A) = (r + s) / 2,sum(B) = (r - s) / 2,假设|A|=|B|=n 所 ...
- Codeforces Round #277 (Div. 2 Only)
A:SwapSort http://codeforces.com/problemset/problem/489/A 题目大意:将一个序列排序,可以交换任意两个数字,但要求交换的次数不超过n,输出任意一 ...
- 使用windows操作EXCEL如何关闭EXCEL进程
经常项目上有导入excel的需求,其实导入一个固定格式的excel数据非常容易,但是,发现一个问题就是,导入excel后,用户在打开excel时,必须要打开2次才能打开excel,这让人很不爽:开始查 ...
- PatentTips - Wear Leveling for Erasable Memories
BACKGROUND Erasable memories may have erasable elements that can become unreliable after a predeterm ...
- msp430入门编程12
msp430中C语言的模块化头文件及库文件12 msp430入门学习 msp430入门编程
- php统计图类库JpGraph
php统计图类库JpGraph JpGraph官网地址:https://jpgraph.net/. (1)下载类库: 下载地址:https://jpgraph.net/download/. 选择版本, ...
- 一份关于webpack2和模块打包的新手指南(二)
插件 我们已经看到一个内置的webpack插件的例子,在npm run build脚本中调用的webpack -p命令就是使用webpack附带的UglifyJsPlugin插件以生产模式压缩打包文件 ...
- Codeforces Round #291 (Div. 2) B. Han Solo and Lazer Gun
因为是x,y均为整数因此对于同一直线的点,其最简分数x/y是相同的(y可以为0,这里不做除法)于是将这些点不断求最简分数用pair在set中去重即可. #include <cmath> # ...