Avatar billede bongo20 Nybegynder
06. august 2005 - 19:39 Der 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.

Hvad sker der, og hvad skal jeg gøre?

:o)
Avatar billede nielle Nybegynder
06. august 2005 - 20:13 #1
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.
Avatar billede bongo20 Nybegynder
06. august 2005 - 22:10 #2
Det har jeg også rodet med, men fatter ikke hvad der foregår. På MSDN har de nogle eksempler som jeg ikke er i nærheden af at få til at virke.

Er det meget indviklet at få overført de ændringer en bruger har lavet i programmet til en database?
Avatar billede nielle Nybegynder
06. august 2005 - 22:16 #3
Prøv at post den kode hvor du opretter og binder din Adapter.
Avatar billede bongo20 Nybegynder
06. august 2005 - 22:52 #4
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);
        }
Avatar billede nielle Nybegynder
06. august 2005 - 22:59 #5
Der må også være noget SQL-kode et eller andet sted (din SELECT-kommando).
Avatar billede bongo20 Nybegynder
07. august 2005 - 00:42 #6
private void InitCommandCollection() {
            this.m_commandCollection = new System.Data.OleDb.OleDbCommand[2];
            this.m_commandCollection[0] = new System.Data.OleDb.OleDbCommand();
            this.m_commandCollection[0].Connection = this.Connection;
            this.m_commandCollection[0].CommandText = "SELECT CompanyName, Phone, Website, Contact, ContactPhone, ContactMobile, Contact" +
                "Email, NextContact FROM Stamdata";
            this.m_commandCollection[0].CommandType = System.Data.CommandType.Text;
            this.m_commandCollection[1] = new System.Data.OleDb.OleDbCommand();
            this.m_commandCollection[1].Connection = this.Connection;
            this.m_commandCollection[1].CommandText = "SELECT CompanyName, Phone, Website, Contact, ContactPhone, ContactMobile, Contact" +
                "Email, NextContact FROM Stamdata";
            this.m_commandCollection[1].CommandType = System.Data.CommandType.Text;
        }


Men det er noget der er genereret automatisk da jeg satte det op....
Avatar billede nielle Nybegynder
07. august 2005 - 18:00 #7
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();

string mySelectSQL = "SELECT CompanyName, Phone, Website, Contact, ContactPhone, ContactMobile, ContactEmail, NextContact FROM Stamdata";
OleDbCommand mySelectCmd = new OleDbCommand(mySelectSQL, myConn);
myAdapter.SelectCommand = mySelectCmd;

// 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");
Avatar billede nielle Nybegynder
16. august 2005 - 17:58 #8
Har du fået kigget på det?
Avatar billede nielle Nybegynder
22. august 2005 - 22:37 #9
?
Avatar billede bongo20 Nybegynder
12. september 2005 - 22:17 #10
Jeg har brugt en anden løsning,.. men har lært noget her,. smider du et svar?
Avatar billede nielle Nybegynder
12. september 2005 - 22:31 #11
Oki :^)
Avatar billede nielle Nybegynder
20. september 2005 - 17:22 #12
Takker for point :^)
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