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;
}
}
}
分享到:
相关推荐
1. **获取DataGrid数据**:DataGrid的数据通常是从数据源(如SQL Server数据库、XML文件或数组)绑定而来的。在导出前,我们需要先从DataGrid中提取这些数据。可以通过遍历DataGrid的Items集合来获取每一行的数据,...
- BoundColumn和自动生成的列可以直接通过TableCell.Text获取文本。 - HyperLinkColumn、ButtonColumn、EditCommandColumn等需要将Cell内的控件转换为相应的控件进行操作。 例如,对于声明了HyperLinkColumn的第一...
4. **获取DataGrid数据**: 需要遍历DataGrid的所有行和列,提取数据。假设DataGrid名为`myDataGridView`,我们可以这样做: ```vb For Each row As DataGridViewRow In myDataGridView.Rows For Each cell As ...
在这个Demo中,NPOI被用来创建Excel文件,并填充从Easyui Datagrid获取的数据。Easyui Datagrid是一个轻量级的JavaScript组件,用于在网页上展示和操作表格数据。 首先,我们要了解如何使用Easyui Datagrid。...
从数据库中获取数据并存储在DataSet或DataView中,这是DataGrid数据的基础。 - **遍历DataGrid** 遍历DataGrid中的每一行和每一列,获取数据。可以使用循环结构,如For Each,来访问行和列的Cell对象。 - **...
从任意来源获取数据,包括本地或者远程数据(使用 ajax,延迟函数或插件)呈现一个容易设计的简单的 HTML 表格(没有插入 css) 简单定义列半自动排序器和寻呼器(用于远程数据,你需要编写服务器端)用于 cell,...
- **DataKeys**:这是一个`DataKey`的集合,通过行索引可以获取对应的键值。这对于需要在服务器端操作特定行时非常有用。 **4. 其他重要属性** - **EditItemIndex** 和 **SelectedIndex**:分别表示当前处于编辑...
在读取时,需要根据单元格的类型(如CellType)适当地转换数据,如使用`cell.NumericCellValue`获取数字,`cell.DateCellValue`获取日期等。 5. **性能优化**: 大型Excel文件可能会影响性能。为了提高效率,可以...
要将DataGrid中的数据导出,我们需要遍历DataGrid的所有行和列,获取数据并写入Excel工作表: ```csharp for (int i = 0; i < dataGrid.Items.Count; i++) { for (int j = 0; j < dataGrid.Columns.Count; j++...
它可以从各种数据源获取数据,包括Access数据库。在VB.NET中,我们可以使用ADO.NET(ActiveX Data Objects .NET)框架来连接和操作Access数据库。 1. **数据库连接**: 在VB.NET中,我们通常使用`OleDbConnection`...
DataGrid控件通过行(Item)和单元格(Cell)来组织数据,开发者可以通过编程的方式来访问和修改这些行和单元格中的数据。 在***中,要想访问DataGrid控件中的所有控件值,需要通过遍历DataGrid控件中的所有项...
// 假设这里是从数据库获取数据 List<PersonRole> teamMembers = new List(); teamMembers.Add(new PersonRole { name = "张三", role = "经理" }); teamMembers.Add(new PersonRole { name = "李四", role = ...
当用户选择了数据栅格中的一行时,可以通过这个属性访问该行的所有单元格(Cell)对象。具体实现如下: ```csharp int friendId = int.Parse(dgvResult2.SelectedRows[0].Cells[0].Value.ToString()); ``` 在这段...
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString(); String.Format("yyyy-MM-dd ", yourDateTime); Convert.ToDateTime("2005-8-23").ToString("yyMMdd", System.Globalization....
dataRow[cell.ColumnIndex] = cell.StringCellValue; } dataTable.Rows.Add(dataRow); } } // 将DataTable绑定到DataGridView dataGridView1.DataSource = dataTable; } } catch (Exception ex) { ...
var data = string.Join(",", cells.Select(cell => cell.OwningColumn.HeaderText + "," + cell.Value)); Clipboard.SetText(data); } _selectionRectangle = null; } } // ...其他方法(如粘贴) } ``` 这...
worksheet.setCell(i, j, dataGridData[i][j]); } } ``` 6. **全选操作**:在描述中提到的全选操作,通常是在用户界面中实现的,例如在DataGrid组件上。当用户点击全选按钮时,可以选取所有行的数据。这需要...
解析过程中,我们需要遍历工作表(Sheet),获取行(Row)和单元格(Cell)的数据,将这些数据转化为适合存储或处理的格式。 然后,以`客户清单.xls`为例,假设这是一个包含客户信息的Excel文件,可能有列如"姓名...
获取错误信息并到指定页面 不要使用Response.Redirect,而应该使用Server.Transfer e.g // in global.asax protected void Application_Error(Object sender, EventArgs e) { if (Server.GetLastError() is ...