我一直在尝试在单元格编辑事件中获取活动数据网格的名称。
首先,我不知道这是一个好习惯,但我有一个在编辑数据网格单元格时运行的事件。然后,我试图测试用户是否在表中添加了一行。我想要一种方法来查看正在编辑哪个表,以便我可以放入一个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;的名字。
显然,如果这不是一个好习惯,我想知道。感谢。
答案 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);
}