LINQ to SQL 从 WPF 数据网格插入
LINQ to SQL Insert from WPF Datagrid
我有一个简单的 table,我希望能够使用 WPF 中的数据网格对其进行编辑(更新和插入新记录)。我正在使用 LINQ to SQL 类,它基本上可以工作,但我真的不明白我是否正确地进行了。
当我插入新行时,数据网格自动将 0 分配给 ID 列(这是一个自动生成的主键)。所以我在 RowEditEnding 处理程序中添加了一个检查:
private void Submittal_EditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.Row.IsNewItem)
{
//We want to add to our observable collection, and then update the database.
int i = -1; // this will be the new ID value for insert
Submittal subAdded = (Submittal) e.Row.Item;
subAdded.SubID = i;
_dataDc.Submittals.InsertOnSubmit(subAdded);
}
_dataDc.SubmitChanges();
}
当我声明 subAdded 并将其设置为等于转换行项时,是该行项的副本,还是我直接修改了 Datagrid 创建的对象?它似乎有效,但我突然想到这意味着 C# 会自动给我相当于 c 中的指针。我对 C# 的了解还不足以决定这是否属实,而且我的搜索也没有给我任何具体的答案。此行为是来自 C# 还是来自 WPF?
在您的代码中,您直接修改由数据网格创建的对象。事实上,如果你被绑定(你应该这样),你实际上是在修改绑定的项目。
所有类都是引用类型,与其他语言中的指针类型相似。例外是 struct
和 int
、char
等基本类型,它们是 值类型 。您正在获取(并转换)一个引用,因此您的更改会传播到指向该对象的任何其他引用
所以你没看错,部分行为(绑定项)来自 WPF,其余部分(引用类型)是 C# 的一部分。
我有一个简单的 table,我希望能够使用 WPF 中的数据网格对其进行编辑(更新和插入新记录)。我正在使用 LINQ to SQL 类,它基本上可以工作,但我真的不明白我是否正确地进行了。
当我插入新行时,数据网格自动将 0 分配给 ID 列(这是一个自动生成的主键)。所以我在 RowEditEnding 处理程序中添加了一个检查:
private void Submittal_EditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.Row.IsNewItem)
{
//We want to add to our observable collection, and then update the database.
int i = -1; // this will be the new ID value for insert
Submittal subAdded = (Submittal) e.Row.Item;
subAdded.SubID = i;
_dataDc.Submittals.InsertOnSubmit(subAdded);
}
_dataDc.SubmitChanges();
}
当我声明 subAdded 并将其设置为等于转换行项时,是该行项的副本,还是我直接修改了 Datagrid 创建的对象?它似乎有效,但我突然想到这意味着 C# 会自动给我相当于 c 中的指针。我对 C# 的了解还不足以决定这是否属实,而且我的搜索也没有给我任何具体的答案。此行为是来自 C# 还是来自 WPF?
在您的代码中,您直接修改由数据网格创建的对象。事实上,如果你被绑定(你应该这样),你实际上是在修改绑定的项目。
所有类都是引用类型,与其他语言中的指针类型相似。例外是 struct
和 int
、char
等基本类型,它们是 值类型 。您正在获取(并转换)一个引用,因此您的更改会传播到指向该对象的任何其他引用
所以你没看错,部分行为(绑定项)来自 WPF,其余部分(引用类型)是 C# 的一部分。