Gå til innhold

Slette en post i datafil


Anbefalte innlegg

Heisan

Jeg har en SQL tabell for kunder. Primary key er KundeID

 

Denne tabellen viser jeg i en DatagridView. Jeg har en knapp som heter "Slett kunde". Jeg sliter litt med koden som skal ligge bak knappen

 

Når jeg prøver meg på Me.KundeTA.Delete(....) så forlanges samtlige felter i tabellen som parametere og det må jo være bare tull. Så lenge jeg har Primary key value må da det være mer en nok. Hvordan går dette ellers når man oppdaterer eller endrer SQL tabellene? Da vil jo all kode bli feilaktig.

 

Tips mottas med takk...

Lenke til kommentar
Videoannonse
Annonse

Du må legge til en constraint som forteller at kundeid er primary key.

 

Eksempel

Dim primaryKey(1) As DataColumn 
primaryKey(0) = ds.Tables(0).Columns("kundeid") 
ds.Tables("Kunder").PrimaryKey = primaryKey 

 

Evt kan du bruke MissingSchemaAction.AddWithKey når du fyller tabellen.

mySqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey    
mySqlDataAdapter.Fill(myDataSet, "Customers")

Lenke til kommentar
Hvis du fyller DataGridView ved hjelp av DataAdapter og DataSet kan du vel bare fjerne den aktuelle DataGridViewRow og så skjer det automatisk.

8483889[/snapback]

Interresang tanke. Jeg har noe slik:

dim KunderTA as new DatabaseDatasetTableAdapters.KundeTableAdapter
dim KunderDS as new DatabaseDataset.KundeDataTable
KunderTA.fill(KunderDS)
me.DataGridView.DataSource = KunderDS

 

Mener du da at jeg kan gjøre noe slik:

me.DataGridView.CurrentRow = Nothing

Dette vil vel fjerne posten i Datagridden, men vil den også fjerne den i Datasettet? CurrentRow vil i såfal da være en referanse til DataRow i Datasettet, og det henger jo på greip. Men fra å fjerne i datasettet til selve filen må vel også gjøres. Ser ikke noe metode for det, hvis da dette ikke går automatisk ved neste FILL da.

Lenke til kommentar
Hvis du fyller DataGridView ved hjelp av DataAdapter og DataSet kan du vel bare fjerne den aktuelle DataGridViewRow og så skjer det automatisk.

8483889[/snapback]

Interresang tanke. Jeg har noe slik:

dim KunderTA as new DatabaseDatasetTableAdapters.KundeTableAdapter
dim KunderDS as new DatabaseDataset.KundeDataTable
KunderTA.fill(KunderDS)
me.DataGridView.DataSource = KunderDS

 

Mener du da at jeg kan gjøre noe slik:

me.DataGridView.CurrentRow = Nothing

Dette vil vel fjerne posten i Datagridden, men vil den også fjerne den i Datasettet? CurrentRow vil i såfal da være en referanse til DataRow i Datasettet, og det henger jo på greip. Men fra å fjerne i datasettet til selve filen må vel også gjøres. Ser ikke noe metode for det, hvis da dette ikke går automatisk ved neste FILL da.

8483964[/snapback]

 

 

Ble litt usikker akkurat nå, men jeg mener det er tilstrekkelig å kjøre Update metoden i DataAdaptern.

 

Har ikke Visual Studio kjørende akkurat nå, og jeg er elendig på kode fra hode :ermm:

 

 

EDIT:

 

Mulig du må bygge en deletecommand ved hjelp av commandbuilder objektet for å få det til å funke.

dataadapter.deletecommand = commandbuilder.getdeletecommand et eller annet.

 

Deretter er det bare å enten kalle på dataadapter.update når du er ferdig å redigere på datagridden, eller ved en eller annen event fra datagridden.

Endret av kimo78
Lenke til kommentar

Nope. Det funker ikke fordi ITEM is ReadOnly

Prøvde også me.KunderDS(Me.DataGridView.CurrentRow.Index) = Nothing med samme resultat

 

Det jeg derimot tror jeg kan bruke er noe slilk, gjennstår å se etter testing så klart...

me.KunderTA.DeleteKundeByID(me.KunderDS(me.DataGridView.CurrentWor.Index).KundeID)
me.KunderTA.Fill(Me.KunderDS)

DeleteKundeByID er en ny metode som dukket opp når jeg i DatabaseDataset.xsd filen la til følgende QUERY:

DELETE FROM Kundeliste
WHERE (KundeID = @Param1)

Vi får håpe dette virker

Lenke til kommentar

For meg virker det veldig omfattende og komplisert å gjøre det på den måten du skriver. Så lenge det er mulig å benytte sql mot datakilden din så skal det være en piece of cake å få det til å fungere mot datagridview. Både ny rad, redigering av celler og sletting av rader.

 

Hva med å bruke datagridview.rows.remove eller liknende?

Endret av kimo78
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...