using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
namespace Splash.WPF
{
public static class DataGridPlus
{
/// <summary>
/// 获取DataGrid控件单元格
/// </summary>
/// <param name="dataGrid">DataGrid控件</param>
/// <param name="rowIndex">单元格所在的行号</param>
/// <param name="columnIndex">单元格所在的列号</param>
/// <returns>指定的单元格</returns>
public static DataGridCell GetCell(this DataGrid dataGrid, int rowIndex, int columnIndex)
{
DataGridRow rowContainer = dataGrid.GetRow(rowIndex);
if (rowContainer != null)
{
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
if (cell == null)
{
dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[columnIndex]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(columnIndex);
}
return cell;
}
return null;
}
/// <summary>
/// 获取DataGrid的行
/// </summary>
/// <param name="dataGrid">DataGrid控件</param>
/// <param name="rowIndex">DataGrid行号</param>
/// <returns>指定的行号</returns>
public static DataGridRow GetRow(this DataGrid dataGrid, int rowIndex)
{
DataGridRow rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
if (rowContainer == null)
{
dataGrid.UpdateLayout();
dataGrid.ScrollIntoView(dataGrid.Items[rowIndex]);
rowContainer = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex(rowIndex);
}
return rowContainer;
}
/// <summary>
/// 获取父可视对象中第一个指定类型的子可视对象
/// </summary>
/// <typeparam name="T">可视对象类型</typeparam>
/// <param name="parent">父可视对象</param>
/// <returns>第一个指定类型的子可视对象</returns>
public static T GetVisualChild<T>(Visual parent) where T : Visual
{
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)
{
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)
{
child = GetVisualChild<T>(v);
}
if (child != null)
{
break;
}
}
return child;
}
}
}
分享到:
相关推荐
C# Wince中设置DataGrid的Cell的格式、颜色 可以根据条件任意设置Cell的颜色边框等,甚至可以重画, 并且也有DataGrid动态绑定的功能,值得拥有。
easyUI拓展:获取当前datagrid中在编辑状态的行编号列表,直接使用即可
DataGrid中嵌入comBox,MVVM,
DataGrid等转换为word,excel报表专集
使银光控制DATAGRID支持按CTRL+C来复制的单元格。
c# WPF中通过双击编辑DataGrid中Cell的示例(附源码).docx
一个update扩展方法 文档中一种是比较笨的方法 一次只能修改一个列而且受列编辑类型影响(比如number datetime)扩展一次编辑多列,不受编辑类型影响,没有编辑属性也可以。
flex4 dataGrid 日期格式转换,flex4 dataGrid 日期格式转换.doc
获取DataGrid行号和列号在使用过程中还是蛮实用的,下面为大家详细介绍下FLEX是如何做到的,感兴趣的朋友可以了解下
wpf datagrid 单元格颜色 根据条件改变颜色
DataGrid全选并获取选中条目数
flex动态生成datagrid表头,外加linechart的简单操作,值得学习!
WPF中DataGrid里面的Checkbox实现单选关键代码, 文档里面的代码复制粘贴即可实现!本人也是项目需要写的一个功能11行代码实现此功能! 希望可以帮助到你们!
DataGrid 底部合计,在DataGrid 的外部,底部横向滚动条的下面做的汇总。
很简单的datagrid 复选框示例,使用DataGridTemplateColumn列,HeaderTemplate与CellTemplate,标题栏可以全选或反选所有的行
如何在没有回发或AJAX的情况下获取DataGrid行值。
对MFC中的DataGrid控件的用法进行了一些总结
Delphi操作数据库实现DataGrid操作的代码实例,是一个基础级而且很实用的DataGrid应用用法实例,同时还演示了adoquery和adotable的操作方法,演示了如何增加、修改和删除数据等。
WPF中DataGrid得到其中一行的值
DataGrid显示数据库查询 DataGrid显示数据库查询 DataGrid显示数据库查询