zoukankan      html  css  js  c++  java
  • silverlight带有复选框的列

    今天我们来一起学习怎样自定义DataGrid的单元格呈现形式的基本操作方法。

    基本知识讲解

     

    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文件代码

    <UserControl

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

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

        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文件代码

    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;

            }

        }

    }

  • 相关阅读:
    使用VS进入源码调试
    Nlog配置
    一个极简的爬虫
    简单的调用图灵机器人
    docker部署netcore项目 nginx负载均衡
    windows nginx负载均衡
    windows服务器环境配置redis sentinel部署
    ASP.NET资源大全-知识分享
    ABP动态生成WebAPI
    windows服务器环境下安装redis
  • 原文地址:https://www.cnblogs.com/hl3292/p/1875424.html
Copyright © 2011-2022 走看看