Laden...

DatagridView zurückschreiben[gelöst]

Erstellt von Scarecraft vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.337 Views
Scarecraft Themenstarter:in
268 Beiträge seit 2008
vor 13 Jahren
DatagridView zurückschreiben[gelöst]

verwendetes Datenbanksystem: SQLExpress

Hallo ,
Ich versuche mich grad in Datenbanken einzuarbeiten und finde meinen Fehler net 😦 .
Ich möchte Daten eines Tables in ein Datagridview anzeigen. Das klappt auch alles Toll. Nun möchte ich aber wenn man was ändert dies auch zurückschreiben hier mein Code:




 private String myConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\...\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SQLStatements SqlStatement = new SQLStatements();
            BindingSource bSource = new BindingSource();
            AdminToolDatabaseDataSet.ComputerDataTable dTable = new AdminToolDatabaseDataSet.ComputerDataTable();
            AdminToolDatabaseDataSetTableAdapters.ComputerTableAdapter ComputerAdapter = new AdminToolDatabaseDataSetTableAdapters.ComputerTableAdapter();


 public Form1()
            {
                InitializeComponent();
                [...]


                SqlConnection myConnection = new SqlConnection(myConnectionString);

               
                ComputerAdapter.Connection = myConnection;
                ComputerAdapter.GetData();                
                ComputerAdapter.Fill(dTable);
               
               
                bSource.DataSource = dTable;
                dataGridView1.DataSource = bSource;
             
            }
 private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
            {

                ComputerAdapter.Update((AdminToolDatabaseDataSet.ComputerDataTable)bSource.DataSource);

                
            }

Alles verkürttzt auf das Wesentliche. Hat wer eine Idee was ich falsch mache ? 😦

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker

J
3.331 Beiträge seit 2006
vor 13 Jahren

Hallo,

erster Fehler: Du erklärst nichts, woran du merkst, dass es einen Fehler gegeben haben soll.

Zweitens: Wieso schreibst du in den Update-Befehl nicht einfach dTable als Parameter, sondern nimmst den komischen Umweg über die BindingSource?

Drittens: Automatische Änderungen sind meistens unpraktisch oder nicht benutzerfreundlich. Deshalb ist das Speichern über CellValueChanged nicht zu empfehlen. Aber wenn man es unbedingt so machen will, dann kommt:

Viertens: Die Änderungen landen erst dann vom DataGridView in der DataTable, wenn die aktive Datenzeile gewechselt wird. Das CellValueChanged ändert aber daran nichts; also kennt die DataTable keine Änderungen. Das kannst du beeinflussen, indem du vor den Update-Befehl ein DGV.**EndEdit **oder ein BS.EndEdit setzt.

Gruß Jürgen

Scarecraft Themenstarter:in
268 Beiträge seit 2008
vor 13 Jahren

Hallo juetho,

Hallo,

erster Fehler: Du erklärst nichts, woran du merkst, dass es einen Fehler gegeben haben soll.

Die Datensätze sind beim nochmaligem öffnen der Anwendung nicht da.

Zweitens: Wieso schreibst du in den Update-Befehl nicht einfach dTable als Parameter, sondern nimmst den komischen Umweg über die BindingSource?

Ups, okay habs geändert 😉 ist besser .

Drittens: Automatische Änderungen sind meistens unpraktisch oder nicht benutzerfreundlich. Deshalb ist das Speichern über CellValueChanged nicht zu empfehlen. Aber wenn man es unbedingt so machen will, dann kommt:

Ist auch "nur" zum Ändern, das einlesen der Daten soll an einer anderen Stelle geschehen. Aber wenn z.B. sich ein Name ändert (z.B. wenn einer Heiratet) soll man das so ändern können.

Viertens: Die Änderungen landen erst dann vom DataGridView in der DataTable, wenn die aktive Datenzeile gewechselt wird. Das CellValueChanged ändert aber daran nichts; also kennt die DataTable keine Änderungen. Das kannst du beeinflussen, indem du vor den Update-Befehl ein DGV.**EndEdit **oder ein BS.EndEdit setzt.

Mh... hab ich aber irgendwie ist immernoch keine änderung beim erneutem Start in der DB. Sie ist dann immernoch so wie vorher.
Gruß Christopher

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker

J
3.331 Beiträge seit 2006
vor 13 Jahren

Könnte es sein, dass für die Datenbank bei jedem Programmstart die ursprüngliche Version genommen wird? Schau einmal unter "Eigenschaften" und "lokale Kopie" und "Kopieren wenn neuer" nach.

Jürgen

Scarecraft Themenstarter:in
268 Beiträge seit 2008
vor 13 Jahren

Nein daran liegt es wohl leider auch nicht. Ich kann sogar zur laufzeit neu auslesen und es ist dann trotzdem noch da. Bzw ungeändert. DB ist auf "Copy if newer" gestellt.

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker

J
3.331 Beiträge seit 2006
vor 13 Jahren

Dann habe ich nur noch die Idee, dass CellValueChanged wirklich ungeeignet ist. Setze den Update-Befehl mal in einen Button-Click, der nach dem Wechsel der Zeile ausgelöst wird. Wenn dann immer noch nichts passiert, liegt es irgendwo an den Adapter-Befehlen.

Beispiel: Entsteht die DataTable durch einen JOIN, oder fehlt der PrimaryKey in den Spalten? Dann sind automatisch erstellte UPDATE-Befehle nicht möglich.

Gruß Jürgen

Scarecraft Themenstarter:in
268 Beiträge seit 2008
vor 13 Jahren

Hallo juetho,
Vielen vielen dank, dadran lag es wirklich 😉 . Wenn ich das ganze in einen Button setze klappt es.

Vielen dank nochmal 😉.

Name: Scarecraft
Language:C#
learning since:winter 2007
IDE: Visual Studio 2005/08 Professional Editon
Skill:Medium
qualifications: MCP - Microsoft Certified Professional
Homepage : FX RPG Maker