Atualmente, estou trabalhando com SQL CE e WPF. no meio da codificação, fiquei impressionado com a idéia de converter o conjunto de dados de um banco de dados em minha coleção de observação, que se liga aos controladores da interface do usuário, como Listbox e listview.
plz me guie, se possível com código !!
Respostas:
2 para resposta № 1Digamos que seu DataSet contenha uma Tabela chamada Pessoa e essa Pessoa tenha as colunas Id, Nome e Idade.
Você primeiro cria um Person
classe para armazenar seus dados de Pessoa:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Então você usa o LINQ para preencher seu 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")
}));
Você precisará adicionar a seguinte referência de montagem ao seu projeto para usar o AsEnumerable<T>()
e Field<T>()
métodos de extensão:
System.Data.DataSetExtensions (em System.Data.DataSetExtensions.dll)
Editar
Em resposta ao seu comentário, você normalmenteprocesse cada alteração que você fizer nos dados imediatamente, em vez de tentar converter todo o ObservableCollection de volta no DataSet. Portanto, por exemplo, se você adicionar uma nova Pessoa ao seu ObservableCollection, também desejará adicionar essa Pessoa ao DataSet.
Adicione uma pessoa:
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);
Excluir uma pessoa:
var table = dataSet.Tables["Person"];
var row = table.AsEnumerable().Where(p => p.Id == person.Id);
row.Delete();
Atualize uma pessoa (digamos que você queira alterar a idade para 37):
var table = dataSet.Tables["Person"];
var row = table.AsEnumerable().Where(p => p.Id == person.Id);
var row["Age"] = 37;
Você também pode querer olhar para LINQ to SQL porque automatiza muitas dessas coisas.