zoukankan      html  css  js  c++  java
  • 强大的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: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/)

  • 相关阅读:
    Atitit attilax要工作研究的要素 纪要 方案 趋势 方向 概念 理论
    Atitit 常见每日流程日程日常工作.docx v7 r8f
    Atitit it 互联网 软件牛人的博客列表
    Atitit 信息链(Information Chain)的概念理解 attilax总结
    Atitit 知识点的体系化 框架与方法 如何了解 看待xxx
    Atitit 聚合搜索多个微博 attilax总结
    Atitit 企业知识管理PKM与PIM
    Atitit 项目沟通管理 Atitit 沟通之道 attilax著.docx
    Atitit 项目管理软件 在线服务 attilax总结 1. 项目管理协作的历史 1 1.1. Worktile 406k 1 1.2. Teambition  584k in baidu
    Atitit.每周末总结 于每周一计划日程表 流程表 v8 import 上周遗漏日志补充 检查话费 检查流量情况 Crm问候 Crm表total and 问候
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3413273.html
Copyright © 2011-2022 走看看