【问题标题】:LINQ to SQL Insert from WPF Datagrid从 WPF Datagrid 插入 LINQ to SQL
【发布时间】:2015-03-26 10:53:35
【问题描述】:

我有一个简单的表,我希望能够使用 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?

【问题讨论】:

    标签: c# wpf linq datagrid


    【解决方案1】:

    在您的代码中,您直接修改了由数据网格创建的对象。事实上,如果您被绑定(应该如此),您实际上是在修改被绑定的项目

    所有类都是引用类型,与其他语言中的指针类型相似。例外是structs 和intchar 等基本类型,它们是值类型。您正在获取(并转换)一个引用,因此您的更改会传播到指向该对象的任何其他引用

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

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 2012-03-25
      相关资源
      最近更新 更多