C# 如何在dataGrid1_BeginningEdit事件上获取datagrid单元格的值?

C# 如何在dataGrid1_BeginningEdit事件上获取datagrid单元格的值?,c#,wpf,datagrid,C#,Wpf,Datagrid,我试图在使用dataGrid1_BeginingEdit事件停止事件时检查datagrid单元格的值是否为null 代码如下,我可以在执行“dataGrid2_CellEditEnding(对象发送者,DataGridCellEditEndingEventArgs e)”时使用“((TextBox)e.EditingElement).Text”,但不能用于以下内容 private void dataGrid2_BeginningEdit(object sender, DataGridBe

我试图在使用dataGrid1_BeginingEdit事件停止事件时检查datagrid单元格的值是否为null

代码如下,我可以在执行“dataGrid2_CellEditEnding(对象发送者,DataGridCellEditEndingEventArgs e)”时使用“((TextBox)e.EditingElement).Text”,但不能用于以下内容

    private void dataGrid2_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
    {
        int column = dataGrid2.CurrentCell.Column.DisplayIndex;
        int row = dataGrid2.SelectedIndex;

        if (((TextBox)e.EditingElement).Text == null)
            return;
非常感谢

试试这个-

 private void dataGrid2_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (dataGrid2[e.ColumnIndex, e.RowIndex].Value == null)
                {}
        }
(e.EditingEventArgs.Source as TextBlock).Text

我想这会帮助你

    private void DataGrid_BeginningEdit(
        object sender,
        Microsoft.Windows.Controls.DataGridBeginningEditEventArgs e)
    {
        e.Cancel = GetCellValue(((DataGrid) sender).CurrentCell) == null;
    }

    private static object GetCellValue(DataGridCellInfo cell)
    {
        var boundItem = cell.Item;
        var binding = new Binding();
        if (cell.Column is DataGridTextColumn)
        {
            binding
              = ((DataGridTextColumn)cell.Column).Binding
                    as Binding;
        }
        else if (cell.Column is DataGridCheckBoxColumn)
        {
            binding
              = ((DataGridCheckBoxColumn)cell.Column).Binding
                    as Binding;
        }
        else if (cell.Column is DataGridComboBoxColumn)
        {
            binding
                = ((DataGridComboBoxColumn)cell.Column).SelectedValueBinding
                     as Binding;

            if (binding == null)
            {
                binding
                  = ((DataGridComboBoxColumn)cell.Column).SelectedItemBinding
                       as Binding;
            }
        }

        if (binding != null)
        {
            var propertyName = binding.Path.Path;
            var propInfo = boundItem.GetType().GetProperty(propertyName);
            return propInfo.GetValue(boundItem, new object[] {});
        }

        return null;
    }

如果查看,它们包含一个属性
,可用于从数据网格中选择单元格。

我发现了一种不同的方法:

ContentPresenter cp = (ContentPresenter)e.Column.GetCellContent(e.Row);
YourDataType item = (YourDataType)cp.DataContext;

这比其他一些有效答案简单得多:

    private void DataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
    {
        string content = (e.EditingEventArgs.Source as TextBlock).Text;

        if (String.IsNullOrEmpty(content))
            e.Cancel = true;
    }

很抱歉,这是我的Datagrid,不是Datagrid视图。你知道如何为Datagrid执行此操作吗?你的列类型是什么?DataGridTextColumn还是其他?如果你使用上面的coed,你面临什么问题?对我来说,
EditingEventArgs.Source
似乎总是
null
。@RohitVats你有时间提出建议/评论吗此@wpf it--找不到Datagrid的CurrentCell属性。我不知道您为什么找不到它,但您也可以使用DataGridBeginingEditeEventArgs e对象。它有e.Column和e.Row.DataContext属性,这对您有利。在GetCellValue()调用中,boundItem现在将是e.Row.DataContext,cell.Column将是e.Column。
    private void DataGrid_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
    {
        string content = (e.EditingEventArgs.Source as TextBlock).Text;

        if (String.IsNullOrEmpty(content))
            e.Cancel = true;
    }