做过ASP.NET开发的朋友都知道,ASP.NET提供了强大的列表数据控件,从ASP.NET1.1
时代的DataGrid,到ASP.NET2.0时代的GridView,再到ASP.NET3.5时代的ListView,功能越
来越强大,使用起来也非常的灵活.在Silverlight2中,同样提供了一个类似的数据列表控件
DataGrid,虽然silverlight是WPF的一个子集,但是在WPF却没有提供DataGridR控件.
DataGrid控件提供了一个非常灵活的方式来进行表格数据的显示,内置的表类型有文本框列
,复选框列和模板列,内置支持排序,锁定列功能,以及内置支持下拉显示一条记录详细信息的功能.
使用方式一,自动生成列
首先定义一个数据对象,设置DataGrid的AutoGenerateColumns属性为True,以便让DataGrid可以自动生成列,这样绑定的数据可以自动实现编辑功能,它会自动选用DataGridCheckBoxColumn和DataGridTextColumn.在你的数据对象中设置字段属性是否为可写可读意味着该列是否可编辑.
数据对象BookClass:
public class BookClass { public string Title { get; set; }//自动使用DataGridTextColumn模板 public string Author { get; set; }//自动使用DataGridTextColumn模板 public DateTime Time { get{return DateTime.Now;}}//不可修改,只读 public bool IsCheck { get; set; }//自动使用DataGridCheckBoxColumn模板 /// <summary> /// 实例化 /// </summary> /// <param name="title">书名</param> /// <param name="author">作者</param> /// <param name="ischeck">是否选择</param> public BookClass(string title, string author,bool ischeck) { Title = title; Author = author; IsCheck = ischeck; } }
数据绑定控件DataGridBook:为方便检测是否更改数据对象,添加一个Button按钮
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="DataGridTest.Control.DataGridBook" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="400" Height="150"> <Grid x:Name="LayoutRoot" Background="White"> <data:DataGrid Name="gridAutoGenerateColumns" AutoGenerateColumns="True"> </data:DataGrid> <Button Name="btnTest" Content="检测" Click="Button_Click" Width="60" Height="24" VerticalAlignment="Bottom" /> </Grid> </UserControl>
后台cs代码为:
/// <summary> /// 数据列自动生成 /// </summary> public partial class DataGridBook : UserControl { public DataGridBook() { InitializeComponent(); DataBinding(); } public void DataBinding() { List<BookClass> list = new List<BookClass>() { new BookClass("射雕英雄传", "金庸", true), new BookClass("坏蛋是怎样炼成的", "六道", false) }; gridAutoGenerateColumns.ItemsSource = list; } /// <summary> /// 检测 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click(object sender, RoutedEventArgs e) { if (gridAutoGenerateColumns.SelectedIndex == -1) return; BookClass book = gridAutoGenerateColumns.SelectedItem as BookClass; MessageBox.Show(book.Title + "," + book.Author + "," + book.Time + "," + book.IsCheck.ToString()); } }
运行页面如图所示
现在我们在dataGrid中修改一下数据,检查是否改变了数据对象,在修改值内容后我们点击检测如图所示
发现除了Time属性为可读不可修改,均改变了数据对象
DataGrid其他属性:
CanUserReorderColumns:是否可以拖动列
CanUserResizeColumns:是否可以设置列宽
CanUserSortColumns:是否可以对列排序
使用方式二 自定义列