Изменить вид сетки, но не источник данных

#c# #winforms

#c# #winforms

Вопрос:

У меня есть DataTable initalTable, который содержит некоторые начальные цены. Я использую эту таблицу данных как DataSource для a GridView . У пользователя будет возможность изменить некоторые значения в GridView , но значения из моей начальной таблицы также изменяются. Как я могу обойти эту привязку? Мне нужно сделать перекрестную ссылку между значениями, измененными пользователем в GridView , с теми, которые я изначально сохранил в моем DataTable .

Комментарии:

1. Почему бы не взять две таблицы данных? Скопируйте одно в другое. Один для исходных данных, а другой для измененных данных. Затем поместите соединение и выберите нужные столбцы.

Ответ №1:

Вы можете использовать метод GetChanges или просто клонировать DataTable.

 private IEnumerable<String> GetChangedWithCrossReference()
{
    return from originalRow in this.storeDataSet.PricesDataTable
               join changedRow in this.storeDataSet.PricesDataTable.GetChanges(DataRowState.Changed)
               on changedRow["Id"] equals originalRow["Id"]
           select String.Format("Was {0}, became {1}",
               originalRow ["Value"], 
               changedRow["Value"]);
}
  

или даже лучше и быстрее MSDN:

 private IEnumerable<String> GetChangedWithCrossReference()
{
    return from row in this.storeDataSet.PricesDataTable
           select String.Format("Was {0}, became {1}", 
               row ["Value"],
               row ["Value", DataRowState.Original])
           where row.State == DataRowState.Changed;
}