Как обнаружить только последние измененные данные, чтобы отклонить изменения? - PullRequest
0 голосов
/ 05 июля 2019

В моей DataTable последняя строка, которая была изменена пользователем, должна быть отклонена.Мой код отклоняет всегда в том же порядке.Если пользователь изменяет первую строку первым, а после этого изменяет третью строку, программа должна сначала отклонить третью строку, но вместо этого она отклоняет первую строку.У вас есть идея, как я могу определить правильный порядок измененных строк?

   public void UndoChanges()
    {                    
        foreach (DataRow dr in MyTable.Rows)
        {                
            if (dr.RowState != DataRowState.Unchanged)                
            {
                dr.RejectChanges();
                return;
            }
        }
    }

1 Ответ

0 голосов
/ 05 июля 2019

Это мое окончательное решение: DataTable прослушивает событие RowChanged.Я поместил измененную строку в список.Благодаря jdweng и Тиму Шмелтеру .

    private DataTable dt;
    public List<DataRow> ModifiedRowsList { get; private set; }

    public myClass()
    {
        dt = new DataTable();
        dt.RowChanged += new DataRowChangeEventHandler(Row_Changed);
        ModifiedRowsList = new List<DataRow>();
    }

    public void UndoChanges()
    {
        if (ModifiedRowsList.Count > 0)
        {
            DataRow dr = dt.Rows[dt.Rows.IndexOf(ModifiedRowsList[ModifiedRowsList.Count - 1])];

            dr.RejectChanges();

            ModifiedRowsList.RemoveAt(ModifiedRowsList.Count - 1);
        }
    }

    private void Row_Changed(object sender, DataRowChangeEventArgs e)
    {
        if(e.Action != DataRowAction.Rollback)
        {
            ModifiedRowsList.Add(e.Row);
        }          
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...