Avatar billede ulrikp Nybegynder
18. november 2004 - 19:55 Der er 9 kommentarer

Datagrid, opdater i db

Jeg populerer et datagrid med data fra en Access db på følgende måde:

private void Form1_Load(object sender, System.EventArgs e) {
DataTable customerTable = controller.getCustomerTable();
this.gridCustomer.DataSource = customerTable;
}

public DataTable getCustomerTable() {
OleDbConnection con = null;           
try {               
  con = new OleDbConnection(SOURCE);
  dAdapter = new OleDbDataAdapter("SELECT * FROM CUSTOMER", con);
  dSet = new DataSet();
  dAdapter.Fill(dSet,"CUSTOMER");
} catch(OleDbException e) {
  Console.WriteLine("OleDb error: " + e.Message);
}
return dSet.Tables["CUSTOMER"];
}

Data kommer fint frem i grid'et, men ændringerne gemmes ikke i databasen, når jeg lukket programmet. Hvordan gør jeg det?
Avatar billede arne_v Ekspert
18. november 2004 - 19:59 #1
Du skal vel kalde:

dAdapter.Update(dSet,"CUSTOMER");

når formen lukkes.
Avatar billede ulrikp Nybegynder
18. november 2004 - 20:15 #2
Det har jeg prøvet. Herved får jeg følgende fejl:

An unhandled exception of type 'System.InvalidOperationException' occurred in system.data.dll

Additional information: Update requires a valid UpdateCommand when passed DataRow collection with modified rows.
Avatar billede ulrikp Nybegynder
18. november 2004 - 20:17 #3
Er det noget med, at jeg, et eller andet sted, skal definere, hvordan min SQL UPDATE på CUSTOMER ser ud?
Avatar billede arne_v Ekspert
18. november 2004 - 20:17 #4
Prøv og sæt en:

OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);

ind
Avatar billede ulrikp Nybegynder
18. november 2004 - 20:25 #5
Kan du uddybe, hvad jeg skal gøre med den?
Avatar billede arne_v Ekspert
18. november 2004 - 20:26 #6
Så vidt jeg ved : ingenting

Den burde selv assigne en UPDATE kommando til dAdapter
Avatar billede arne_v Ekspert
18. november 2004 - 20:27 #7
Hvis det ikke virker kan det dig gøres manuelt
Avatar billede ulrikp Nybegynder
18. november 2004 - 20:42 #8
Det hjalp med...

OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
cBuilder.GetUpdateCommand();           
dAdapter.Update(dSet,"CUSTOMER");

...hvis jeg redigerer direkte i grid'et, hvilket helt sikkert er et fremskridt, så tak for det, men jeg har også nogle tekstfelter, som er bundet til felterne via...

this.textBoxName.DataBindings.Add("Text",dt,"Name");
this.textBoxAddress.DataBindings.Add("Text",dt,"Address");
this.textBoxZip.DataBindings.Add("Text",dt,"Zip");
this.textBoxCity.DataBindings.Add("Text",dt,"City");

...hvor dt er min Customer DataTable. Hvis jeg retter i disse felter afspejler ændringerne sig ikke i databasen?! selvom jeg bruger OleDbCommandBuilder
Avatar billede arne_v Ekspert
18. november 2004 - 22:08 #9
pas
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester