Laden...

datagridview changes

Erstellt von darkkilltec vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.453 Views
D
darkkilltec Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren
datagridview changes

verwendetes Datenbanksystem: <MSSQL 2008>

So Guten Morgen 😃

Also ich habe ein DataGridView welche natürlich gefüllt wird, bisher hatte ich das so wenn ein CellLeave event ausgelöst wird, wird die table automatisch an den server geschickt mit update was dazu führt das die geänderten einstellungen natürlich direkt geändert werden.

Ich möchte das aber ab ändern zu irgendwie was wo wenn ich den edit modus von einem cell beende das er dann kontrolliert ob das geändert so schon auf dem server ist(um doppelte wörter zu verhindern) und ob es in abhängigkeit mit anderen einträgen stand(weswegen man die änderung ja nicht übernommen sollte)

Es gibt in c# ja ne methode fürs datagridview wo beim verlassen des edit modus ausgelöst wird, das hatte ich auch probiert klappte aber leider nicht so wie ich wollte.

Hat dazu vielleicht jemand ein paar tipps?

Danke im vorraus

643 Beiträge seit 2006
vor 14 Jahren

Wieso klapt das nicht mit dem Event wie du das möchtest ?

D
darkkilltec Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

eine gute frage ich mach das genauso wie bei cell leave das beim verlassen der edit moduses die datagridview.Source einfach per update an die sql datenbank geschickt wird. aber das speichert der irgendwie nicht im sql server?

643 Beiträge seit 2006
vor 14 Jahren

Setze mal ein Breakpoint um zu sehen ob das Event wirklich ausgelöst wird. Wenn ja, versuche mal ein Update auf dein Gridview, damit dieser wieder mit den Daten vom SQL Server angeglichen wird. Wenn alles nicht hilft, poste mal dein Code.

D
darkkilltec Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Also der Event wird ausgeführt er geht den try auch komplett durch aber der datensatz ist auf dem sql server dann nicht up to date ??
obwohl ich per breakpoint kontrolliert habe und dort seh ich in der DataTable den neuen Eintrag!
also nach der zuweisung von dt=(DataTAble)datagridview....
steht in dt der neue eintrag.



                SqlDataAdapter da = new SqlDataAdapter("Select * From " + comboBox1.SelectedItem.ToString() + "", con);
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                DataTable dt = new DataTable();
                try
                {
                    dt = (DataTable)dataGridView1.DataSource;
                    da.Update(dt);
                }
                catch
                {
                    MessageBox.Show("Sie haben eine ungültige Anweisung getätigt");
                }

643 Beiträge seit 2006
vor 14 Jahren
        private SqlDataAdapter sqlAdapter;
        private SqlCommandBuilder sqlBuilder;
        
        private void Form1_Load(object sender, EventArgs e) 
        {
            sqlAdapter = new SqlDataAdapter("Select * From Table", ConnectionString);
            sqlBuilder = new SqlCommandBuilder(sqlAdapter); 
            DataTable table = new DataTable(); 
            this.sqlAdapter.Fill(table); 
            this.dataGridView1.DataSource = table; 
        } 

        private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
        {
            this.sqlAdapter.Update((DataTable)this.dataGridView1.DataSource); 
        } 

So müsste es funktionieren. Erzeuge keine neue Instanz vom SqlDataAdapter und SqlCommandBuilder.

D
darkkilltec Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

und was macht das für nen unterschied??

Mein Quellcode funktioniert bei cell_Leave event... aber eben nicht bei cellendEdit event ?

643 Beiträge seit 2006
vor 14 Jahren

Ich glaube es macht schon einen Unterschied.
Du erstellst eine neue Instanz von SqlAdapter der von deiner DataTable verwendet wird.

Jedenfalls funktionert es auch CellEndEdit, wenn du keine neue Instanz erstellst, was auch nicht nötig ist.

D
darkkilltec Themenstarter:in
46 Beiträge seit 2009
vor 14 Jahren

Kann ich eventuell nen anderen weg einschlagen ?
Also zum beispiel nachschauen welche row geändert wurde und dann diese updaten oder sowas?

643 Beiträge seit 2006
vor 14 Jahren

Wenn es dir nur um die ComboBox geht.


        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            sqlAdapter = new SqlDataAdapter("Select * From " + comboBox1.Text, ConnectionString);
            sqlBuilder = new SqlCommandBuilder(sqlAdapter);
            DataTable table = new DataTable();
            this.sqlAdapter.Fill(table);
            this.dataGridView1.DataSource = table; 
        }  

Ich glaube es macht schon einen Unterschied.
Du erstellst eine neue Instanz von SqlAdapter der von deiner DataTable verwendet wird.

Jedenfalls funktionert es auch CellEndEdit, wenn du keine neue Instanz erstellst, was auch nicht nötig ist.

Erlich gesagt bin ich mir selber nicht mehr so sicher, ob meine vorherige Post stimmt. Momentan kann ich auch nix zuverlässig testen.

5.299 Beiträge seit 2008
vor 14 Jahren

Kann ich eventuell nen anderen weg einschlagen ?
Also zum beispiel nachschauen welche row geändert wurde und dann diese updaten oder sowas? Das macht der DataAdapter doch automatisch. Der updated nur die Datarows, deren DataRowState was anderes ist als Unchanged.

Der frühe Apfel fängt den Wurm.