设置相同的值时,DataSet防止修改标志

时间:2018-07-24 06:59:58

标签: c# .net wpf

某些背景

我有一个DataColumn“ Col1”,它通过绑定绑定到外部WPF控件:

<Setter Property="ControlProperty" Value="{Binding Col1, Mode=TwoWay}" /> 

问题在于控件有时会使用 same 值更新“ ControlProperty”,但这会让我的DataRow认为它已经更改,尽管实际上没有更改。此行为没有记录,并且其时机似乎无法确定。

实际问题

所以我的问题是,当写入 same 值时,是否有任何方法可以防止DataRow被标记为已修改?这是一个代码和一个Dotnet fiddle来说明我的预期行为(请注意,这不是我的真实代码,这只是出于演示目的)。

using System;
using System.Data;

public class Program
{
    public static void Main()
    {
        // Just setup the Set, nothing interesting
        var dat = new DataSet("Set1");
        var tab = new DataTable("Tab1");
        tab.Columns.Add(new DataColumn("Col1", typeof(int)));
        dat.Tables.Add(tab);
        tab.Rows.Add(123);
        var changes = dat.GetChanges();
        dat.Merge(changes);
        dat.AcceptChanges();

        Console.WriteLine("Row status is: {0}", tab.Rows[0].RowState); // Unchanged
        // Setting the same value will flag the Row "modified"
        // This is external code that I don't control
        tab.Rows[0]["Col1"] = tab.Rows[0]["Col1"];
        if (dat.HasChanges()) // Actual Value: True, Expected Value: False
        {
            Console.WriteLine("Row status is: {0}", tab.Rows[0].RowState); // Actual Value: Modified, Expected Value: Unchanged
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您只需在代码中写一行

import gql from 'graphql-tag';

export const fancyMutation = gql`
mutation($id: ID!)
{
  delete_something(id:$id) {
    id
    foo
    bar
  }
}
`;

在为列分配相同的值之后,如下所示。

        tab.Rows[0].AcceptChanges();