如何获取DataGridRow单元格的值?

3

我目前已经设置了这种方法,用于检测DataGrid中每行的双击事件:

private void Row_DoubleClick(object sender, RoutedEventArgs e)
    {
        DataGridRow row = (DataGridRow)sender;
        DataRow dr = (DataRow)row.DataContext;
        string value = dr[0].ToString();
        MessageBox.Show(value);
    }

我的问题是我似乎无法获取单元格的值。正如您所看到的,我尝试获取行中第一个单元格的值,但它会导致程序崩溃。有什么想法可以解决这个问题吗? :)


1
它是如何崩溃的?有出现错误信息吗? - Omada
6
删除所有内容并开始阅读此处。在WPF中,没有所谓的“获取DataGridRow单元格值”,只有数据绑定和UI与数据之间的适当分离。你不能“获取DataGridRow单元格值”,因为UI的职责是展示数据,而不是保存数据。 - Federico Berasategui
2个回答

2
尝试这个。
public static DataGridCell GetCell(DataGrid dataGrid, int row, int column)
{
    DataGridRow rowContainer = GetRow(dataGrid, row);
    if (rowContainer != null)
    {
        DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);

        // try to get the cell but it may possibly be virtualized
        DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
        if (cell == null)
        {
            // now try to bring into view and retreive the cell
            dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[column]);

            cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
        }

        return cell;
    }

    return null;
 }

0
作为HighCore提到的一个例子:
这里我有一个对象列表(类型为EntitySet),我将其设置为dataGrid的ItemsSource。然后在双击事件中,我只需将SelectedItem强制转换为EntitySet即可。
  public List<EntitySet> EntitySets { get; set; }

  public EntitySetsForm( List<EntitySet> entitySets )
  {
     InitializeComponent();
     EntitySets = entitySets;
     dataGrid.ItemsSource = entitySets;
  }

  private void dataGrid_MouseDoubleClick( object sender, MouseButtonEventArgs e )
  {
     EntitySet entitySet = dataGrid.SelectedItem as EntitySet;
     if ( entitySet == null ) return;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接