Usuário com melhor resposta
HELP - DataSet gravando dados apenas em memoria

Pergunta
-
Pessoal, vou explicar como criei o meu dataset, para que voces possam entender o que eu fiz.
Fui la no menu Data, Add New Data Source...
Escolhi a opção Database, criei uma nova conexão do tipo Microsoft SQL Server Compact 3.5 (estou usando Pocket PC).
Testei a conexão, tudo ok..estou enchergando os dados no Server Explorer, tudo blz.
Dai para incluir um novo registro nesse DataSource, eu estou fazendo o seguinte:
DataRow dr = coletasDataSet.Tables["coletas"].NewRow();
dr["NOME"] = 'teste';
coletasDataSet.Tables["coletas"].Rows.Add(dr);
O registro é gravado sem problemas, mas com o id -1 (o campo id esta como autoinc na minha tabela).
Só que eu gostaria de efetivar esse registro em minha base de dados. Como posso fazer isso?
Além disso, eu gostaria de pegar os dados desse DataSource e jogar na minha grid.
Estou criando tudo da forma errada?- Movido C. Augusto Proiete [MVP]Moderator quinta-feira, 11 de fevereiro de 2010 23:43 Movido para o fórum apropriado (De:C#)
Respostas
Todas as Respostas
-
Boas,
Ao criar o DataSet como voce diz em cima , voce esta a criar um Typed DataSet , este tipo de DataSet tem vantagens e desvantagem. Se a tua tabela tiver uma / ou mais chaves primarias , o Typed DataSet ira criar automaticamente os seguintes comandos Insert , Delete , Update, Select caso contrario ira criar apenas o Select.
O comando Update apanha todas as rows de uma determinada tabela do DataSet e através do RowState ( que e' colocado automaticamente pela framework , caso altere uma row passa a Modified , caso insira uma nova Inserted .... Mas também pode ser forçado através do row.setModified() por exemplo ). Esses comandos Insert / Update / Delete / Select estao todos no table adapter de cada tabela.
Em primeiro lugar visto que foi criado um Typed DataSet não e' necessário fazer DataRow dr = ds.Tables[""].... porque os Typed DataSet tem a colecção de tabelas ja tipificadas em código pode alterar para o seguinte :
DataSet ds = new DataSet();
DataSet._EquipasRow row = ds._Equipas.New_EquipasRow();
row.Campo = "";
Row.Campo2 = 10;
ds._Equipas.Add_EquipasRow(row);
Agora de seguida vamos chamar o TableAdapter para invocar o metodo Update que trata de tudo ( inserts , updates , delete's ) , por defeito o nome do table adapter e' NomeDaTableTableAdapter neste caso a tabela _Equipas fica _EquipasTableAdapter , para o poder chamar no seu codigo tem que fazer um using referente ao DataSet que sera using NomeProjeto.NomeDataSetTableAdapters; .
Depois basta fazer apenas o seguinte :
_EquipasTableAdapter tab = new _EquipasTableAdapter();
tab.Update(ds._Equipas);
E ele ira tratar de todas as suas rows
Espero ter ajudado
- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 12 de fevereiro de 2010 16:56
-
Ja agora a parte de passar para a sua grid basta fazer o Grid.DataSource = ds._Equipas desde que tenha feito o fill com o table adapter do genero
_EquipasTableAdapter tab = new _EquipasTableAdapter();
tab.Fill(ds._Equipas);
Grid.DataSource = ds_Equipas
Se tiver o autoGenerateCollumns a true na grid ele ira criar automaticamente as colunas- Sugerido como Resposta AndreAlvesLimaModerator sexta-feira, 12 de fevereiro de 2010 16:56
-