为了让grid看上去更好,使用table styles。一个table style可以包含多种table styles——你想在grid中查看每个column。在这个例子中,columns包括订购信息和收货人姓名。下面的代码设置状态:
DataGridTableStyle ts = new DataGridTableStyle();
ts.MappingName = "Order";
// Order date column style
DataGridColumnStyle orderDate = new DataGridTextBoxColumn();
orderDate.MappingName = "OrderDate";
orderDate.HeaderText = "Date";
ts.GridColumnStyles.Add(orderDate);
// Shipping name column style
DataGridColumnStyle shipName = new DataGridTextBoxColumn();
shipName.MappingName = "ShipName";
shipName.HeaderText = "Customer";
shipName.Width = this.Width - orderDate.Width - 37;
ts.GridColumnStyles.Add(shipName);
grdOrders.TableStyles.Add(ts);
每个column style(DataGridColumnStyle)设置一个表字段名称映射到(MappingName property),header text用于显示(HeaderText property),并自定义column宽度(Width property)。两个column styles被加入到table style中,最后将table style加入到DataGrid控件(grdOrders)中。在这个例子里styles是被代码创建的,但是styles同样可以在forms designer中被创建。
当这个grid看上去很好时,有许多common features在grid中可以被支持。编辑就是其中之一。但编辑在DataGrid控件中不是被自动支持的,这就需要手工实现。一种方法就是使用一个隐藏的TextBox控件,当一个cell被选中时显示,当编辑结束时隐藏。这就需要你声明一些变量:
private DataGridCell editCell;
private bool inEditMode = false;
private bool inUpdateMode = false;
我们需要获取哪个cell被编辑激活(editCell),这个cell是否在编辑状态(inEditMode),和我们是否正在更新一个cell(inUpdateMode).
控制编辑代码如下:
private void grdOrders_CurrentCellChanged(object sender,
System.EventArgs e)
{
if (!inUpdateMode)
{
if (inEditMode && !grdOrders.CurrentCell.Equals(editCell))
{
// Update edited cell
inUpdateMode = true;
grdOrders.Visible = false;
DataGridCell currentCell = grdOrders.CurrentCell;
grdOrders[editCell.RowNumber, editCell.ColumnNumber] =
txtEdit.Text;
grdOrders.CurrentCell = currentCell;
grdOrders.Visible = true;
inUpdateMode = false;
txtEdit.Visible = false;
inEditMode = false;
}
// Enter edit mode
editCell = grdOrders.CurrentCell;
txtEdit.Text = (string)grdOrders[editCell.RowNumber,
editCell.ColumnNumber];
Rectangle cellPos = grdOrders.GetCellBounds(editCell.RowNumber,
editCell.ColumnNumber);
txtEdit.Left = cellPos.Left - 1;
txtEdit.Top = cellPos.Top + grdOrders.Top - 1;
txtEdit.Width = cellPos.Width + 2;
txtEdit.Height = cellPos.Height + 2;
txtEdit.Visible = true;
inEditMode = true;
}
}
当一个cell被点击(inEditMode和inUpdate被设置为false)时,当前的cell被保存(editCell)。然后,隐藏的TextBox(txtEdit)得到当前cell的内容,重新设置到当前cell的位置,并使其可见(在当前的cell上边)。当编辑完成、其他cell被选择时,事件代码不可用(inUpdateMode设置成true),当被编辑的cell从TextBox控件得到后,将新的cell保存(currentCell)。在update过程中,grid没有被update(Visible设置成false),当update完成TextBox被重新隐藏。
其他的common grid feature是通过点击column header进行排序。代码如下:
private void grdOrders_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)
{
DataGrid.HitTestInfo hitTest = grdOrders.HitTest(e.X, e.Y);
if (hitTest.Type == DataGrid.HitTestType.ColumnHeader)
{
// Exit edit mode
txtEdit.Visible = false;
inEditMode = false;
// Sort tapped column
DataTable dataTable = (DataTable)grdOrders.DataSource;
DataView dataView = dataTable.DefaultView;
string columnName = dataTable.Columns[hitTest.Column].ColumnName;
if (dataView.Sort == columnName)
dataView.Sort = columnName + " DESC";
else
dataView.Sort = columnName;
}
}
如果header被点击,第一件事是确保任何当前cell的编辑被取消。然后一个DataView被创建并通过点击的column排序。如果一个column再次得到点击事件而排序顺序将被改成递减。后来的点击将使排序在递增和递减间切换,直到其他的column被点击。
分享到:
相关推荐
在探讨“Windows mobile cf DataGrid列宽设置源码”这一主题时,我们深入解析了如何在Windows Mobile平台上的Compact Framework中使用DataGrid控件自定义列宽。此知识点聚焦于两个核心方面:初始化DataGrid列样式...
在.NET框架中,DataGrid控件是用于展示数据表格的一种常用组件,特别是在WPF(Windows Presentation Foundation)中。自定义DataGrid样式可以帮助开发者根据应用程序的需求调整控件的外观和交互方式,使其更符合用户...
在本文中,我们将深入探讨WPF(Windows Presentation Foundation)中的DataGrid控件的样式和定制。DataGrid是WPF提供的一种强大的数据展示组件,它允许用户以表格形式展示和操作数据。通过理解并掌握DataGrid的样式...
在WPF(Windows Presentation Foundation)中,`DataGrid`是一个非常重要的控件,它用于显示数据集合,并且提供了丰富的功能,如排序、分页、编辑等。本篇将深入讲解如何在WPF中编写和应用`DataGrid`的样式。 首先...
在Windows Presentation Foundation (WPF) 中,`DataGrid` 是一个强大的控件,用于显示和编辑数据集。这个控件提供了灵活的布局和格式化功能,使得开发者可以创建复杂的表格应用。本篇将深入探讨`WPF DataGrid`的...
例如,可以创建DataGrid.RowStyle和DataGrid.CellStyle来定制行和单元格的样式,或者使用DataGrid.Columns属性中的DataGridTextColumn来设置列样式。 3. **DataGridTextColumn详解**: 数据列通常由...
在.NET框架中,DataGrid控件是用于展示表格数据的重要组件,常被广泛应用于Windows Forms或WPF应用程序中。在实际应用中,我们往往需要根据设计需求对DataGrid的外观进行定制,包括改变表头的样式。本篇将详细介绍...
在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)环境中通过自定义控件来重写DataGrid的样式,实现列表头的自动合并以及数据的分页显示或分页查询功能。DataGrid是WPF中一个强大的数据展示...
`DataGrid`控件允许为每列设置特定的样式,包括列头样式、单元格样式以及编辑样式。开发者可以通过继承`DataGridColumnStyle`类并重写其方法,实现自定义的列行为,例如添加编辑功能、下拉列表或复选框。 `Program....
在Windows Presentation Foundation (WPF) 中,`DataGrid` 是一个强大的控件,常用于显示和编辑表格数据。本文将深入探讨如何自定义`DataGrid`的列标题样式、行样式、鼠标悬浮及选择样式,以及滚动条的样式,帮助你...
在Windows Presentation Foundation (WPF) 中,`DataGrid` 是一个强大的控件,用于展示数据集,特别是当需要以表格形式展示大量数据时。在默认情况下,`DataGrid` 提供了基本的样式和布局,但为了满足特定的界面设计...
在Windows Presentation Foundation(WPF)中,`DataGrid`是一个非常重要的控件,它用于显示和编辑表格形式的数据。这个压缩包"DataGrid 样式.rar"显然包含了关于如何自定义和美化`DataGrid`样式的资源和示例。在这...
在WPF(Windows Presentation Foundation)开发中,`DataGrid`控件是一个常用的数据展示组件,类似于Excel表格。它允许我们以表格形式展示数据,并提供了丰富的功能,如排序、分页、编辑等。当我们需要根据数据的...
为了自定义DataGrid的外观和行为,开发者可以通过修改`ControlTemplate`来改变控件的布局和样式,使用`Style`来设置组件的属性,如颜色、字体、边框等。同时,通过`Triggers`可以根据特定条件更改控件的样式或行为。...
DataGrid控件在.NET Compact Framework中提供了基本的列设置功能,包括列的宽度、样式和绑定数据源等。控制DataGrid列宽的方法主要分为静态设定和动态调整两种。 1. 静态设定列宽度: 在程序设计阶段,可以通过设置...
在本示例中,我们关注的是如何设置 `Datagrid` 的行背景色,以增强视觉效果,帮助用户更好地理解和区分不同的数据。 首先,让我们了解 `Datagrid` 的基本概念。`Datagrid` 是一个控件,通常由多个行和列组成,每一...
在标题提到的“WPF中的DataGrid、Button、ComboBox等样式+DataGrid分页控件”中,我们将深入探讨这些关键组件以及如何自定义它们的样式和实现分页功能。 首先,DataGrid是WPF中用于展示和编辑表格数据的强大控件。...
Visual C++源代码 144 如何在DataGrid单元格设置输入提示Visual C++源代码 144 如何在DataGrid单元格设置输入提示Visual C++源代码 144 如何在DataGrid单元格设置输入提示Visual C++源代码 144 如何在DataGrid单元格...
在C#编程环境中,Windows CE (Wince) 平台上的开发经常涉及到用户界面的创建,其中DataGrid控件是一个常用的展示数据表格的组件。本文将深入探讨如何在C# Wince中设置DataGridCell的格式和颜色,以及实现动态绑定...
WPF中DataGrid控件有时需要在一列中显示多个字段数据,并实现一定的排版,本示例即为解决此类问题提供参考。