Laden...

Editiermaske für DataGridView

Letzter Beitrag vor 18 Jahren 9 Posts 2.540 Views
Editiermaske für DataGridView

Hi@all 🙂

Hab da mal ne kleine aber nervige Frage die mich beschäftigt... und zwar:

Ich habe eine Form "Übersicht" in der sich ein DatagridView befindet in der ich grob mal die Datensätze anzeige. Obendrüber befindet sich eine NavigationToolbar mit einer abgeänderten "Add" Funktion, diese ruft nämlich ein zweites Form "Eingabefenster" auf, über dem bequem neue Datensätze hinzugefügt werden können.

Nun mein Problem, ich möchte die "Edit" Funktion auch ersetzen und zwar so, dass der aktuelle Datensatz an mein Form "Eingabefenster" übergeben wird und meine Textboxen etc. mit den Werten gefüllt werden. Aber irgendwie weiß ich nicht wie ich die Daten übergebe... 🤔

Help me please 😁

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)

Hallo Azrael Masters,

siehe FAQ: Kommunikation von 2 Forms

herbivore

Hi herbivore,

vielen Dank erstmal für deinen Link, so hab ich mir das eigentlich fast gedacht 😉

Also grundsätzlich weiß ich wie ich daten auf eine zweite form übergebe aber muss ich das DataSet übergeben oder die werte einzeln samt datensatz id oder wie bekomm ich das am einfachsten hin?

Grüße Azrael

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)

Hallo Azrael Masters,

Also grundsätzlich weiß ich wie ich daten auf eine zweite form übergebe aber muss ich das DataSet übergeben oder die werte einzeln samt datensatz id oder wie bekomm ich das am einfachsten hin?

Dafür gibt es keine feste Regel. Beides ist möglich und kann sinnvoll sein.

herbivore

Hallo Azrael Masters,

entschuldige Bitte, dass ich jetzt erst antworte.

Dein Vorgehen kann man auf zwei Arten lösen: Entwender, Du übergibst das DataSet, um die Daten in der zweiten Form zur Verfügung zu haben, oder Du machst in dieser Form noch mal ein Fill, um eine neue Instanz des DataSets bzw. der DataTable(s) zu füllen.

Bzgl. der Frage mit dem direkten Anspringen eines Datensatzes: Welche .NET Version benutzt Du denn?

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

Hi Fabian,

kein Problem war ja selber ne Woche im Urlaub 🙂

hm habs jetzt ein bisschen unellegant gelöst (aber UPDATE klappt nicht 😦)

PS: Ich verwende das .NET 2.0 Framework

 
            // Zeile, falls eine Zelle gewählt ist
            DataGridViewRow selectedRow = this.dgv_Overview.SelectedCells[0].OwningRow;

            // Zeile, fals eine Zeile ganz ausgewählt ist
            //DataGridViewRow selectedRow = this.dgv_Overview.SelectedRows[0];

            // Davon die erste Zelle mit der ID
            DataGridViewCell idCell = selectedRow.Cells[0];

            // Wert der ID-Zelle (entspricht dem Primärschlüssel + 1, oder?)
            int Pri = (int)idCell.Value;


            // Mit hilfe der ID die Reihe in der Table suchen
            DataRow DataRow = this.datenbankTest_DataSet.TestTable.Rows[Pri - 1];

EditMask editMask = new EditMask(this, currentDataRow);
            editMask.ShowDialog();
        
        private Overview overview;
        private DataRow dataRow;

        public EditMask(Overview _overview,DataRow _dataRow)
        {
            overview = _overview;
            dataRow = _dataRow;
            InitializeComponent();
            txt_Name.Text = _dataRow[1].ToString();
            txt_Zahl.Text = _dataRow[2].ToString();
        }

        private void btn_Save_Click(object sender, EventArgs e)
        {
            // wenn diese Zeile ausgeführt wurde, wird ItemArray nicht aktualisert
            this.dataRow.ItemArray[1] = txt_Name.Text; 
            this.dataRow.ItemArray[2] = this.txt_Zahl.Text;

            this.overview.testTableTableAdapter.Update(dataRow);
            this.overview.reloadDataSet();
            this.Close();
        }

Aber wenn es irgendwie eleganter geht oder hier das problem des nicht updatens gelöst wird, wäre ich dankbar 🙂

gruß Azrael

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)

Sry für den Doppelpost, aber keiner eine Idee???

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)

Schade dass mir keiner auf die Sprünge geholften hat (Poster oben ausgenommen, ihr wart ne sehr große Hilfe 🙂 )(bei 178 Views), aber ich hab den Fehler nun gefunden^^

hätte einfach nur die zeilen:

this.dataRow.ItemArray[1] = txt_Name.Text; 
            this.dataRow.ItemArray[2] = this.txt_Zahl.Text;

zu

this.dataRow[1] = txt_Name.Text; 
            this.dataRow[2] = this.txt_Zahl.Text;

hätte ändern müssen...

😉 i'm so stupid^^

Greets Azrael

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)

Original von Azrael Masters

   
            // Zeile, falls eine Zelle gewählt ist  
            DataGridViewRow selectedRow = this.dgv_Overview.SelectedCells[0].OwningRow;  
  
            // Zeile, fals eine Zeile ganz ausgewählt ist  
            //DataGridViewRow selectedRow = this.dgv_Overview.SelectedRows[0];  
  
            // Davon die erste Zelle mit der ID  
            DataGridViewCell idCell = selectedRow.Cells[0];  
  
            // Wert der ID-Zelle (entspricht dem Primärschlüssel + 1, oder?)  
            int Pri = (int)idCell.Value;  
  
  
            // Mit hilfe der ID die Reihe in der Table suchen  
            DataRow DataRow = this.datenbankTest_DataSet.TestTable.Rows[Pri - 1];  
  
EditMask editMask = new EditMask(this, currentDataRow);  
            editMask.ShowDialog();  
          
        private Overview overview;  
        private DataRow dataRow;  
  
        public EditMask(Overview _overview,DataRow _dataRow)  
        {  
            overview = _overview;  
            dataRow = _dataRow;  
            InitializeComponent();  
            txt_Name.Text = _dataRow[1].ToString();  
            txt_Zahl.Text = _dataRow[2].ToString();  
        }  
  
        private void btn_Save_Click(object sender, EventArgs e)  
        {  
            this.dataRow[1] = txt_Name.Text;   
            this.dataRow[2] = this.txt_Zahl.Text;  
  
            this.overview.testTableTableAdapter.Update(dataRow);  
            this.overview.reloadDataSet();  
            this.Close();  
        }  

Hm hab mich geirrt, hab doch noch ein Problem damit... und zwar hab ich übersehen dass ich nur den temporären index benutze und so wenn ich das datagridview sortiere oder zeilen lösche, der index nicht mehr stimmt...

Gibs ne Möglichkeit dgv_Overview.CurrentRow (Typ DataGridView.Row) zu einer DataRow zu konvertieren?

so dass ich im Editfenster immer noch Zuweisen ala
this.dataRow[2] = this.txt_Zahl.Text;

und ein Update
this.overview.testTableTableAdapter.Update(dataRow); durchführen kann???

Bitte helft mir 🙁

[**(¯`·._.·[The Higher Community]·._.·´¯)**](http://www.nexus-der-macht.de/)