基本知识讲解

  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: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]的更多相关文章

  1. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  2. 第2课第3节_Java面向对象编程_继承性_P【学习笔记】

    摘要:韦东山android视频学习笔记  面向对象程序的三大特性之继承性:继承性的主要作用就是复用代码.继承性也有一定的限制,如图一 图一 1.我们在第2课第2节_Java面向对象编程_封装性_P 中 ...

  3. jQuery 自定义事件的学习笔记

    jquery中提供了两种方法可以绑定自定义事件: bind()和one()而绑定的自定义事件的触发,必须得用jquery中的trigger()方法才能触发. 我们先来看on事件  代码如下 复制代码 ...

  4. ArcGIS API for JavaScript 4.2学习笔记[15] 弹窗内容的格式与自定义格式

    先看结果截图吧(不看过程可以直接看总结,在文末): 随便点击了两个城市斑块,出现结果如图. 我来解读一下这结果和以前的有什么不同: 这个例子使用了PopupTemplate,数据是Layer(使用Po ...

  5. python基础课程_学习笔记15:标准库:有些收藏夹——fileinput

    标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...

  6. MySQL语法大全_自己整理的学习笔记(MySQL语句 整理二)

    select * from emp; #注释 #--------------------------- #----命令行连接MySql--------- #启动mysql服务器 net start m ...

  7. jQuery源码分析_工具方法(学习笔记)

    expando:生成唯一JQ字符串(内部使用) noConflict():防止冲突 isReady:DOM是否加载完成(内部) readyWait:等待多少文件的计数器(内部) holdReady() ...

  8. 第2课第7节_Java面向对象编程_内部类_P【学习笔记】

    摘要:韦东山android视频学习笔记  1.什么是内部类:在类的内部定义一个类,内部类可以访问类的私有属性 class Outer{ ; class Inner{ public void print ...

  9. 第2课第5节_Java面向对象编程_异常_P【学习笔记】

    摘要:韦东山android视频学习笔记  java的异常处理的原则如下: 1.我们先写一个没有对异常处理的程序,在进行除法运算的时候,除数是非零的话,运行时没有问题的,但是除数为零的时候,运行就会有问 ...

随机推荐

  1. 什么是TLS?

    最近在Istio实验中经常遇到HTTP,HTTPS,TLS等名词,感觉忘得差不多,需要复习一下计算机网络的知识了. 本文参考   http://www.techug.com/post/https-ss ...

  2. 通过一个用户管理实例学习路由react-router-dom知识

    我们通过一个用户管理实例来学习react-router-dom 这个实例包括9个小组件 App.js 引入组件 Home.js 首页组件 User.js 用户管理组件 -  UserList.js 用 ...

  3. python学习之- 生成器/迭代器

    列表生成式写法: [ i*2 for i in range(10) ]也可以带函数 [ fun(i) for i in range(10) ] 生成器:一边循环一边计算的机制称为生成器.在常用函数中, ...

  4. Codeforces 653A Bear and Three Balls【水题】

    题目链接: http://codeforces.com/problemset/problem/653/A 题意: 给定序列,找是否存在连续的三个数. 分析: 排序~去重~直接判断~~ 代码: #inc ...

  5. Java操作XML牛逼利器JDOM&DOM4J

    JDOM  JDOM 是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,用于快速开发 XML 应用 程序. JDOM 官方网站:http://www.jdom.org/ 利 ...

  6. Topcoder 658Div2

    补题风向标——>> 假装题意知道 A:暴力合成一遍了 n=s.size(); m=t.size(); ss+=s; tt+=t; if (ss==tt) or not; B:题意是给定 1 ...

  7. eclipse提速02 - eclipse.ini优化

    给eclipse执行jvm.它可以让你使用自己的jdk,而不是系统环境变量所指定的jdk -vm /path/to/your/java 使用最新的jdk来运行eclipse.使用最新的jdk要好很多. ...

  8. 学习swift从青铜到王者之Swift语言函数05

    1.定义一个函数以及调用 //一,定义一个无参无返回值函数 func fun1(){ print("this is first function") } fun1() 2.定义一个 ...

  9. linux用户列表

    centos上面不知道添加了多少个账户,今天想清理一下,但是以前还未查看过linux用户列表, 一般情况下是 cat /etc/passwd 可以查看所有用户的列表 w 可以查看当前活跃的用户列表 c ...

  10. ADO.NET(OleDb)读取Excel表格时的一个BUG

    如果我们有例如以下一个Excel表格:    如今要使用C#程序读取其内容: using System;  using System.Data.OleDb;    namespace Skyiv.Be ...