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/)

  • 相关阅读:
    程序员写 2000 行 if else?领导:这个锅我不背
    var_dump
    CURL常用命令
    Socket阻塞模式和非阻塞模式的区别
    php框架之odp(一)
    git命令之git clone用法
    git push origin master和git push有什么区别?
    YouTube上最火的十个大数据视频
    Java两种核心机制
    Java四类八种数据类型
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3413273.html
Copyright © 2011-2022 走看看