gpt4 book ai didi

c# - 读取 WPF gridview 中的每个单元格值

转载 作者:太空宇宙 更新时间:2023-11-03 13:07:20 24 4
gpt4 key购买 nike

我在 wpf 中有一个名为 datagrid1 的数据 GridView 。我需要读取数据网格中每个单元格的值。我知道如何在 windows 窗体中做到这一点

string result = datagrid1.Rows[0].Cells[1].Value.ToString();

在 WPF 中如何做到这一点?

最佳答案

在 WPF 中没有简单的方法可以做到这一点,但是这 tutorial对你有用。

编辑:

首先,我完全同意上面提到的 Nitin Joshi 的评论。二、根据这个answer WPF 数据网格被构建为绑定(bind)到类似数据表的东西。大多数时候,您将修改 DataTable,以及 DataTable 中绑定(bind)到 DataGrid 的行/列,而不是DataGrid 它本身就是这样,因此您不需要使用像这样的 datagrid1.Rows[0].Cells[1].Value。但如果您仍然坚持以这种方式获取值(value),这里有一个解决方案:

第二次编辑:由于您只询问了一种读取调用值(value)的方法,因此我会缩短我的回答,但也会更具体一些:GetCellValue 方法按列/行索引返回表示给定 DataGrid 单元格内容的字符串值:

我编写此方法时假定列类型是 TextBoxTextBlockComboBox。其他类型可以用同样的方式处理。

    public string GetCellValue(DataGrid datagrid, int row, int column)
{
var cellInfo = new DataGridCellInfo(
datagrid.Items[row], dataGrid.Columns[column]);

DataGridCell cell = null;
var cellContent = cellInfo.Column.GetCellContent(cellInfo.Item);
if (cellContent != null)
cell = (DataGridCell)cellContent.Parent;

if (cell == null) return string.Empty;

// if DataGridTextColumn / DataGridComboBoxColumn is used
// or AutoGeneratedColumns is True
if (cell.Content is TextBlock)
return ((TextBlock)cell.Content).Text;
else if (cell.Content is ComboBox)
return ((ComboBox)cell.Content).Text;

// if DataGridTemplateColumn is used
// assuming cells are either TextBox, TextBlock or ComboBox. Other Types could be handled the same way.
else
{
var txtPresenter = FindVisualChild<TextBox>((ContentPresenter)cell.Content);
if (txtPresenter != null) return txtPresenter.Text;
var txbPresenter = FindVisualChild<TextBlock>((ContentPresenter)cell.Content);
if (txbPresenter != null) return txbPresenter.Text;
var cmbPresenter = FindVisualChild<ComboBox>((ContentPresenter)cell.Content);
if (cmbPresenter != null) return cmbPresenter.Text;
}
return string.Empty;
}

public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is T)
return (T)child;
else
{
T childOfChild = FindVisualChild<T>(child);
if (childOfChild != null)
return childOfChild;
}
}
return null;
}

然后调用 string result = GetCellValue(dataGrid, 2, 1);(例如从 Button 单击事件),将返回 dataGrid[2,1] 的值。

*注:

  1. DataGridSelectionUnit 必须设置为Cell
  2. DataGrid 必须完全生成,否则 ItemContainerGenerator 返回 null。
  3. GetCellValue 方法适用于一些被认为更常用作 DataGridColumn 类型的 UIElements

关于c# - 读取 WPF gridview 中的每个单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30320307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com