я хочу преобразовать набор данных из базы данных SDF в видимую коллекцию в WPF - PullRequest
1 голос
/ 28 декабря 2010

В настоящее время я работаю с SQL CE и WPF.в середине кодирования я не смог преобразовать набор данных базы данных в мою наблюдаемую коллекцию, которая связана с контроллерами пользовательского интерфейса, такими как список и список.*

1 Ответ

2 голосов
/ 29 декабря 2010

Допустим, ваш 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 , потому что это автоматизирует многие вещи.

...