06. august 2005 - 19:39Der er
11 kommentarer og 1 løsning
dataGridView adapter update
Hej
Jeg har lavet en app. med en dataGridView som henter sine data i en lille access database. Det virker fint. Når programmet kører kan jeg redigere i dataGridView'et. F.eks. slette en række.
Denne sletning vil jeg gerne have samtidig opdaterer min database, men det kan jeg vist ikke finde ud af.
Jeg prøver sådan her:
private void UserDeletedRow_Click(object sender, EventArgs e) { int i = stamdataTableAdapter.Update(kunderDataSet); }
Denne metode fyres af når en række slettes. Jeg får denne fejlmeddelelse når jeg sletter en række nu:
Update requires a valid DeleteCommand when passed DataRow collection with deleted rows.
Du mangler at have tilknyttet en DELETE kommando til din dataadapter. Derfor kan den heller ikke slette rækker fra din tabel.
Prøv at kigge nærmere på OleDbCommandBuilder. Denne klasse kan netop "bygge" UPDATE og DELETE kommandoerene til en Adapter når bare den har SELECT kommandoen.
private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'kunderDataSet.Stamdata' table. You can move, or remove it, as needed. this.stamdataTableAdapter.Fill(this.kunderDataSet.Stamdata); this.dataGridView1.DataSource = bindingSource1; bindingSource1.DataSource = this.kunderDataSet.Stamdata; //this.dataGridView1.UserDeletingRow += new System.Windows.Forms.DataGridViewRowCancelEventHandler(this.UserDeletedRow_Click); this.dataGridView1.UserDeletedRow += new System.Windows.Forms.DataGridViewRowEventHandler(this.UserDeletedRow_Click); }
Hmmm, jeg synes at der mangler noget kode som danner mellemledet mellem de to funktioner du har postet. Kan nu heller ikke påstå at jeg nogenside har brudt mig om den automatik som VS laver for en.
Jeg tror dug at du skulle kunne få det til at virke hvis du tilpasser nedenstående kode til dine omstændigheder:
string myConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Source.C#\e637944\dinDatabase.mdb"; OleDbConnection myConn = new OleDbConnection(myConnStr); OleDbDataAdapter myAdapter = new OleDbDataAdapter();
// Dette er hemmeligheden - ved at lave OleDbCommandBuilder får man // automatisk oprettet en InsertCommand- og en UpdateCommand komamndo // for myAdapter. Det er disse som bliver aktiveret når man senere // kalder Update() OleDbCommandBuilder myCommandBuilder = new OleDbCommandBuilder(myAdapter);
myConn.Open();
DataSet myDataSet = new DataSet(); myAdapter.Fill(myDataSet, "Events");
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.