我一直在尝试在单元格编辑事件中获取活动的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();
有一个线程可以获取所有表的名称,而该线程可以检查是否存在一个表,但是我找不到如何获取sender
数据网格名称的任何信息。
显然,如果这不是一种好的做法,我想知道。谢谢。
使用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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句