Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从WPF Datagrid插入LINQ到SQL_C#_Wpf_Linq_Datagrid - Fatal编程技术网

C# 从WPF Datagrid插入LINQ到SQL

C# 从WPF Datagrid插入LINQ到SQL,c#,wpf,linq,datagrid,C#,Wpf,Linq,Datagrid,我有一个简单的表,我希望能够用WPF中的datagrid编辑(更新和插入新记录)。我正在使用LINQtoSQL类,它基本上是有效的,但我真的不知道我是否正确地使用了它 插入新行时,数据网格会自动将0指定给ID列(它是自动生成的主键)。因此,我向RowEditEnding处理程序添加了一个检查,如下所示: private void Submittal_EditEnding(object sender, DataGridRowEditEndingEventArgs e) {

我有一个简单的表,我希望能够用WPF中的datagrid编辑(更新和插入新记录)。我正在使用LINQtoSQL类,它基本上是有效的,但我真的不知道我是否正确地使用了它

插入新行时,数据网格会自动将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并将其设置为cast行项目时,这是行项目的副本,还是我直接修改了Datagrid创建的对象?这似乎是可行的,但我突然想到,C#会自动给我一个相当于C中指针的值。我对C#了解不够,无法判断这是否属实,我的搜索也没有给我任何具体的答案。这种行为是来自C#,还是来自WPF?

在代码中,您直接修改了datagrid创建的对象。事实上,如果您被绑定(正如您应该的那样),那么您实际上是在修改绑定项

所有类都是引用类型,这类似于其他语言中的指针类型。例外情况是
struct
s和基本类型,如
int
char
等,它们是值类型。您正在获取(并强制转换)一个引用,因此您的更改将传播到指向该对象的任何其他引用

所以你是对的,部分行为(绑定项)来自WPF,其余(引用类型)是C#的一部分