Gå til innhold

C#: Oppdatere database tabell fra gridview


Anbefalte innlegg

Hei

Mulig dette er mere database relatert men det er nå i C# jeg prøver å gjøre om kode til handling :roll:

 

Det jeg i utgangspunktet prøver på er å hente ned data fra en accessbase som jeg har 2 tabeller i og som jeg deretter henter ned ved en sql spørring og legger inn i et datasett i C#.

Deretter presenteres data i en gridview og sålangt fungerer det utmerket.

 

Problemet dukker opp når jeg legger til en ny linje i gridview eller redigerer en rad som allerede finnes så får jeg en feilmelding på at det ikke er mulig å oppdatere når det er hentet data fra 2 tabeller.

jeg ønsker bare å lagre data tilbake til den ene tabellen.

 

Jeg har låst kolonnene fra den joinede tabellen slik at det ikke kan redigeres på den men likevel blir det trøbbel.

 

Det må da finnes en løsning for dette

Kan det kombineres flere datasett for deretter og oppdatere bare den ene tilbake til databasen?

 

 

       DataSet dsMedlemsType;
       OleDbDataAdapter daMedlemsType;
       BindingSource bcMedlemsType = new BindingSource();

 

 

Kode for å hente data og binde denne til datagridview og den gjør akkurat det jeg er ute etter.

private void PopulateGridViewMedlemsType()
       {

           try
           {

               string sql = "SELECT tbl_MedlemsDetaljer.id, tbl_MedlemsDetaljer.MedlemsId,"
               + "tbl_MedlemsDetaljer.MedlemsTypeId, tbl_MedlemsTypeBruker.Navn, tbl_MedlemsTypeBruker.Beskrivelse, tbl_MedlemsTypeBruker.Pris,"
               + "tbl_MedlemsDetaljer.MeldtInn, tbl_MedlemsDetaljer.Meldtut, tbl_MedlemsDetaljer.Medlemsnummer FROM tbl_MedlemsDetaljer"
               + " INNER JOIN tbl_MedlemsTypeBruker ON tbl_MedlemsDetaljer.MedlemsTypeId=tbl_MedlemsTypeBruker.id"
               + " WHERE (((tbl_MedlemsDetaljer.MedlemsId)='" + MedlId + "'))";





               OleDbConnection con = new OleDbConnection(clsPubDeclare.dbConnectionForening);
               dsMedlemsType = new DataSet();
               con.Open();
               daMedlemsType = new OleDbDataAdapter(sql, con);
               daMedlemsType.Fill(dsMedlemsType, "tbl_MedlemsDetaljer");
               con.Close();

               bcMedlemsType.DataSource = dsMedlemsType;
               bcMedlemsType.DataMember = dsMedlemsType.Tables[0].TableName;
               dgvMedlemsType.DataSource = bcMedlemsType;


           }
           catch (Exception ex)
           {

               MessageBox.Show(ex.Message);
           }
           finally
           {
               FormatmedlemsGrid();
           }

       }

 

 

 

Her er det jeg har problemer med som fungerer godt hvis det kun er 1 til 1 mellom tabell og datagridview men ikke når jeg har brukt inner join for å hente data fra 2 tabeller. :D

           this.dgvMedlemsType.Invalidate();
           OleDbCommandBuilder cb = new OleDbCommandBuilder(daMedlemsType);
           daMedlemsType.Update(dsMedlemsType, "tbl_MedlemsDetaljer");

 

 

 

Feilmelding som blir generert her.

Det er logisk at det ikke kan lagres i 2 tabeller samtidig men hvordan styrer en det for å lagre kun til den ene?

System.InvalidOperationException was unhandled
 Message="Dynamisk SQL-generering støttes ikke mot flere basistabeller."
 Source="System.Data"
 StackTrace:
      ved System.Data.Common.DbDataAdapter.UpdatingRowStatusErrors(RowUpdatingEventArgs rowUpdatedEvent, DataRow dataRow)
      ved System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
      ved System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
      ved System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
      ved MedlemsRegister.frLeggTilmedlem.button1_Click(Object sender, EventArgs e) i C:\Users\Knut Nordal\Documents\Visual Studio 2008\Projects\C Sharp\MedlemsRegister\MedlemsRegister\DialogForm\Medlem\frLeggTilmedlem.cs:linje 909
      ved System.Windows.Forms.Control.OnClick(EventArgs e)
      ved System.Windows.Forms.Button.OnClick(EventArgs e)
      ved System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
      ved System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      ved System.Windows.Forms.Control.WndProc(Message& m)
      ved System.Windows.Forms.ButtonBase.WndProc(Message& m)
      ved System.Windows.Forms.Button.WndProc(Message& m)
      ved System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      ved System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      ved System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      ved System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
      ved System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
      ved System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      ved System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      ved System.Windows.Forms.Application.RunDialog(Form form)
      ved System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
      ved System.Windows.Forms.Form.ShowDialog()
      ved MedlemsRegister.usMedlemsRegister.toolEditMedlem_Click(Object sender, EventArgs e) i C:\Users\Knut Nordal\Documents\Visual Studio 2008\Projects\C Sharp\MedlemsRegister\MedlemsRegister\usercontrols\usMedlemsRegister.cs:linje 99
      ved System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
      ved System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
      ved System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
      ved System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
      ved System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
      ved System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
      ved System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
      ved System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
      ved System.Windows.Forms.Control.WndProc(Message& m)
      ved System.Windows.Forms.ScrollableControl.WndProc(Message& m)
      ved System.Windows.Forms.ToolStrip.WndProc(Message& m)
      ved System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
      ved System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      ved System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      ved System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
      ved System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
      ved System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      ved System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      ved System.Windows.Forms.Application.Run(Form mainForm)
      ved MedlemsRegister.Program.Main() i C:\Users\Knut Nordal\Documents\Visual Studio 2008\Projects\C Sharp\MedlemsRegister\MedlemsRegister\Program.cs:linje 18
      ved System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
      ved System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
      ved Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      ved System.Threading.ThreadHelper.ThreadStart_Context(Object state)
      ved System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      ved System.Threading.ThreadHelper.ThreadStart()
 InnerException: 

 

 

PS!For den som lurer så er dette en del av et medlemsregister som jeg prøver å lage :D

Lenke til kommentar
Videoannonse
Annonse

Hjelp, har nå gått igjennom fryktelig mye sider på internett men har ikke funnet noen løsning.

Har kommet over en god del sider som beskriver akkurat det samme spørsmålet som jeg sliter med men når en kommer over slike sider så har de ikke fått svar på spørsmålet.

 

det er mange sider som tar opp datasett.relation men den gjør ikke akkurat det jeg er ute etter men er mere for sammenkobling av 2 grider som jobber mot hverandre.

 

Det jeg er ute etter er at alt skal vises i en grid men at jeg lagrer kun tilbake i den ene tabellen.

 

Ettersom de sidene jeg har kommet over ikke har fått svar på sine henvendelser så anser jeg det som umulig å gjøre i microsoft sin datagridview.

 

Er også avhengig å skrive i en datagridview og ikke i tekstbokser for så å lagre tilbake.

 

men finnes det andre typer grider datakoblinger som kan fungere?

 

Alle hint tas i mot med stor takk :thumbup:

Endret av Icaro2
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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...