Допустим, ваш DataSet содержит таблицу с именем Person, а у этого Person есть столбцы Id, Name и Age.
Сначала вы создаете класс Person
для хранения ваших данных Person:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Затем вы используете LINQ для заполнения вашей ObservableCollection:
var people = new ObservableCollection<Person>(
dataset.Tables["Person"].AsEnumerable().Select(p => new Person
{
Id = p.Field<int>("Id"),
Name = p.Field<string>("Name"),
Age = p.Field<int>("Age")
}));
Чтобы использовать методы расширения AsEnumerable<T>()
и Field<T>()
, вам нужно добавить следующую ссылку на сборку:
System.Data.DataSetExtensions (в System.Data.DataSetExtensions.dll)
Редактировать
В ответ на ваш комментарий вы обычно обрабатываете каждое изменениевы немедленно обращаетесь к данным, а не пытаетесь преобразовать всю коллекцию ObservableCollection обратно в набор данных.Так, например, если вы добавляете нового человека в свою коллекцию ObservableCollection, вы также хотели бы добавить этого человека в набор данных.
Добавить человека:
var table = dataSet.Tables["Person"];
var row = table.NewRow();
row["Id"] = person.Id;
row["Name"] = person.Name;
row["Age"] = person.Age;
table.Rows.Add(row);
Удалить человека:
var table = dataSet.Tables["Person"];
var row = table.AsEnumerable().Where(p => p.Id == person.Id);
row.Delete();
Обновите человека (скажем, вы хотите изменить возраст на 37):
var table = dataSet.Tables["Person"];
var row = table.AsEnumerable().Where(p => p.Id == person.Id);
var row["Age"] = 37;
Возможно, вы также захотите изучить LINQ to SQL , потому что это автоматизирует многие вещи.