为了账号安全,请及时绑定邮箱和手机立即绑定

如何区分数据网格中的新行和现有行?

如何区分数据网格中的新行和现有行?

C#
慕桂英546537 2021-07-19 16:08:48
我在 WPF 应用程序中有一个普通的 DataGrid,它由ObservableCollection<T>. 我正在使用 Dapper 更新 SQL Server 数据库。Dapper 可以毫无问题地更新现有记录,但要将新记录放入数据库中,我必须插入它们。所以我必须打两个 Dapper 电话;一个用于更新用户对现有记录所做的任何更改,另一个用于添加任何新记录。如何区分ObservableCollection用户添加的记录与加载表单时从数据库加载的原始记录?
查看完整描述

2 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

假设 DTO 为


public class Document

{

    int Id { get; set; }

    string DocumentName { get; set; }

    bool IsNew { get; set; } // This field is not in the database

}

我可以使用这个事件处理程序:


private void Documents_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)

{

    foreach(Document item in e.NewItems)

    {

        item.IsNew = true;

    }

}

标记用户添加到数据网格的任何新记录。从数据库加载原始记录后,我钩住了这个处理程序:


public void LoadDocuments()

{

    var documents = myIdbConnection.GetAll<Document>();         

    Documents = new ObservableCollection<Document>(documents);

    Documents.CollectionChanged += Documents_CollectionChanged;

}

接着:


public void Save()

{

    myIdbConnection.Update(Documents.Where(x=>!x.IsNew));

    myIdbConnection.Insert(Documents.Where(x=>x.IsNew));

}


查看完整回答
反对 回复 2021-07-31
?
桃花长相依

TA贡献1860条经验 获得超8个赞

您可以省去事件监听。只需使用另一个值对新记录进行默认初始化即可。


public class Document

{

    static bool IsNewInitializer { get; set; } = false;


    int Id { get; set; }

    string DocumentName { get; set; }

    bool IsNew { get; set; } = IsNewInitializer; // This field is not in the database

}


public void LoadDocuments()

{

    Document.IsNewInitializer = false;


    var documents = myIdbConnection.GetAll<Document>();

    Documents = new ObservableCollection<Document>(documents);


    Document.IsNewInitializer = true;

}

public void Save()

{

    myIdbConnection.Update(Documents.Where(x => !x.IsNew));

    myIdbConnection.Insert(Documents.Where(x => x.IsNew));

    foreach (var d in Documents.Where(x => x.IsNew))

    {

        d.IsNew = false;

    }

}


查看完整回答
反对 回复 2021-07-31
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信