none
HELP - DataSet gravando dados apenas em memoria RRS feed

  • 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?
    quinta-feira, 11 de fevereiro de 2010 01:24

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



    quinta-feira, 11 de fevereiro de 2010 10:16
  • 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
    quinta-feira, 11 de fevereiro de 2010 10:35
  • Se tiver ajudado marque como certo sff

    Cumprimentos
    • Marcado como Resposta [VAZA] sexta-feira, 12 de fevereiro de 2010 17:05
    quinta-feira, 11 de fevereiro de 2010 12:56