在单元格编辑事件中获取活动数据网格的名称?

时间:2016-06-14 02:18:18

标签: c# wpf datagrid

我一直在尝试在单元格编辑事件中获取活动数据网格的名称。

首先,我不知道这是一个好习惯,但我有一个在编辑数据网格单元格时运行的事件。然后,我试图测试用户是否在表中添加了一行。我想要一种方法来查看正在编辑哪个表,以便我可以放入一个if子句来将其指向正确的代码,这样就不会抛出错误。

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {

            Staff_Time_TBL selectedRow = e.Row.Item as Staff_Time_TBL;
            long id = selectedRow.ID;

            if (id == -1)
            {
                // give a GUID and then insert it into the database when saved
                selectedRow.ID = DateTime.UtcNow.Ticks;
                sql.Staff_Time_TBLs.InsertOnSubmit(selectedRow);
            }

            try
            {
                sql.SubmitChanges();
                LastSavedTextBlock.Text = "Last saved: " + DateTime.Now.ToLongTimeString();
            }
            catch(Exception ex)
            {
                Alerts.Error("Couldn't save changed to the database", "Database Error", ex);
            }
        }

目前,显然如果未访问下面代码中的这个表,则会抛出错误,

Staff_Time_TBL selectedRow = e.Row.Item as Staff_Time_TBL;
                long id = selectedRow.ID;

我尝试获取数据网格的名称,这只会返回DataGrid

var tblName = sender.GetType().Name;

这会为变量null返回tblName2,并因此而在最后一行引发异常。

string dataGridName = "";             
            DataObject tblName2 = sender as DataObject;
            dataGridName = tblName2.ToString();

this thread获取所有表名称,This thread检查是否存在,但我找不到任何有关如何获取sender数据网格的信息&# 39;的名字。

显然,如果这不是一个好习惯,我想知道。感谢。

2 个答案:

答案 0 :(得分:1)

如果它是您想要的数据网格的名称,这应该可以。

c

不确定为什么使用DataObject。

答案 1 :(得分:1)

使用VisualTreeHelper类:

private void Dgrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
        {
            FrameworkElement source = e.EditingElement;

            while (!(source is DataGrid))
                source = VisualTreeHelper.GetParent(source) as FrameworkElement;

            MessageBox.Show(((DataGrid)source).Name);
        }