强大的DataGrid组件[7]_自定义DataGrid——Silverlight学习笔记[15]
今天我們來一起學習怎樣自定義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;
??????? }
??? }
}
?
最終效果圖:
?
文章出處:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版權聲明:本文的版權歸作者與博客園共有。轉載時須注明本文的詳細鏈接,否則作者將保留追究其法律責任。
轉載于:https://www.cnblogs.com/Kinglee/archive/2009/08/25/1553938.html
總結
以上是生活随笔為你收集整理的强大的DataGrid组件[7]_自定义DataGrid——Silverlight学习笔记[15]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对于XLS碎片提取的深入研究
- 下一篇: 存储过程中的权限