WPF - 如何从 DataGridRow 获取单元格

swift

1个回答

写回答

qq563577902

2025-07-09 18:55

+ 关注

AI
AI

如何从 DataGridRow 获取单元格?

在WPF中,DataGrid是一个常用的控件,用于显示和编辑数据。当我们需要从DataGrid中获取单元格的值时,可以通过获取DataGridRow并访问其单元格来实现。本文将介绍如何从DataGridRow中获取单元格,并提供一个示例代码来说明该过程。

获取DataGridRow

首先,我们需要获取DataGridRow对象,以便访问其单元格。可以通过以下方式获取DataGridRow对象:

1. 使用VisualTreeHelper类遍历DataGrid的VisualTree,找到DataGridRow对象。

csharp

private DataGridRow GetSelectedRow(DataGrid dataGrid)

{

DataGridRow row = (DataGridRow)dataGrid.ItemContAInerGenerator.ContAInerFromIndex(dataGrid.SelectedIndex);

return row;

}

2. 使用DataGrid的SelectedCells属性获取选中的单元格,然后通过单元格的OwningRow属性获取DataGridRow对象。

csharp

private DataGridRow GetSelectedRow(DataGrid dataGrid)

{

DataGridCellInfo cellInfo = dataGrid.SelectedCells[0];

DataGridRow row = (DataGridRow)dataGrid.ItemContAInerGenerator.ContAInerFromItem(cellInfo.Item);

return row;

}

访问单元格的值

获取到DataGridRow对象后,我们可以通过访问其单元格来获取单元格的值。可以使用以下方法来获取单元格的值:

1. 通过单元格的列索引获取单元格的值。

csharp

private object GetcellValue(DataGridRow row, int columnIndex)

{

if (row == null || row.Item == null)

return null;

DataGridCell cell = Getcell(row, columnIndex);

if (cell == null || cell.Content == null)

return null;

return ((TextBlock)cell.Content).Text;

}

private DataGridCell Getcell(DataGridRow row, int columnIndex)

{

if (row == null)

return null;

DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);

if (presenter == null)

return null;

DataGridCell cell = (DataGridCell)presenter.ItemContAInerGenerator.ContAInerFromIndex(columnIndex);

return cell;

}

private T GetVisualChild<T>(Visual parent) where T : Visual

{

T child = default(T);

int numVisuals = VisualTreeHelper.GetchildrenCount(parent);

for (int i = 0; i < numVisuals; i++)</p> {

Visual v = (Visual)VisualTreeHelper.Getchild(parent, i);

child = v as T;

if (child == null)

{

child = GetVisualChild<T>(v);

}

if (child != null)

{

break;

}

}

return child;

}

2. 通过单元格的列名获取单元格的值。

csharp

private object GetcellValue(DataGridRow row, string columnName)

{

if (row == null || row.Item == null)

return null;

DataGridCell cell = Getcell(row, columnName);

if (cell == null || cell.Content == null)

return null;

return ((TextBlock)cell.Content).Text;

}

private DataGridCell Getcell(DataGridRow row, string columnName)

{

if (row == null)

return null;

DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(row);

if (presenter == null)

return null;

foreach (DataGridColumn column in presenter.Columns)

{

if (column.Header.ToString() == columnName)

{

DataGridCell cell = (DataGridCell)presenter.ItemContAInerGenerator.ContAInerFromItem(row.Item);

return cell;

}

}

return null;

}

示例代码

下面是一个使用上述方法从DataGridRow中获取单元格的值的示例代码:

csharp

private void Button_Click(object sender, RoutedEventArgs e)

{

DataGridRow row = GetSelectedRow(dataGrid);

if (row != null)

{

// 通过列索引获取单元格的值

object cellValue1 = GetcellValue(row, 0);

// 通过列名获取单元格的值

object cellValue2 = GetcellValue(row, "ColumnName");

MessageBox.Show($"Cell value 1: {cellValue1}\nCell value 2: {cellValue2}");

}

}

以上就是如何从DataGridRow中获取单元格的值的方法和示例代码。通过以上代码,我们可以方便地获取DataGrid中选中行的单元格的值,从而进行后续的数据处理或操作。希望本文对您有所帮助!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号