Laden...

[gelöst] DataGridView: CellDoubleClick Event startet nur bei Klick auf die Werte in den Zellen

Erstellt von Edzio vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.136 Views
E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren
[gelöst] DataGridView: CellDoubleClick Event startet nur bei Klick auf die Werte in den Zellen

Hallo zusammen,

ich kenn mich noch nicht sonderlich gut mit dem DGV aus,
habe es aber schonmal geschafft, Daten aus m Excel einzulesen. 😃

Mein aktuelles Problem ist, wenn ich auf eine Zeile/Zelle doppelklicke, soll ein Event gestartet werden
(Zeile löschen, davor aber Nutzer prüfen etc.)
Das Event startet aber nur, wenn ich direkt auf den Wert in der Zelle Klicke,
ich will aber, dass der "Klick" in der ganzen Zelle/Zeile funktioniert.

Hier ist der Anfang von meinem Code:

        //dgv markierte Zeile löschen
        private void dGvexcel_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            dgv_index_ausles = dGvexcel.CurrentCell.RowIndex;
            dgv_wert_ausles = dGvexcel.CurrentCell.Value;
            dgv_spaltzahl_ausles = dGvexcel.ColumnCount;
            eingabe_kontrolle.set_check_admin(verbindung_zu_definitionen.getUsername());

            //Daten aus dgv lesen ermitteln
            for (dgv_spaltzahl_reell_ausles = dgv_spaltzahl_ausles - 1; dgv_spaltzahl_reell_ausles >= 0; dgv_spaltzahl_reell_ausles--)
            {
                if (dGvexcel.Columns[dgv_spaltzahl_reell_ausles].Name == "Projektleiter")
                {
                    dgv_projektleiter_ausles = dGvexcel.Rows[dgv_index_ausles].Cells[dgv_spaltzahl_reell_ausles].Value;
                }
....

Anbei noch ein Ausschnit von meinem DGV.
Danke im Voraus.

Gruß

T
156 Beiträge seit 2012
vor 10 Jahren

Hallo Edzio,

das DataGridView unterstützt die Event Cell(Doucble)Click und CellContent(Double)Click. In deinem Beispiel wird das Event CellDoubleClick genutzt, welches die gesamte Zelle unterstützt. Warum in deinem Fall es sich wie CellContentDoubleClick verhält ist mir nicht klar.

Gibt es noch weiteres relevanten Code, den wir hier nicht sehen bisher?

Viele Grüße,
telfa

E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren

mh eigentlich nicht viel wildes, hab das Event mal im Anschluss gepostet.
Bei den Eigenschaften vom dgv habe ich alles auf Standard gelassen bis auf den Bereich "Verhalten"
(siehe Anhang).

Gruß

//dgv markierte Zeile löschen
        private void dGvexcel_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            dgv_index_ausles = dGvexcel.CurrentCell.RowIndex;
            dgv_wert_ausles = dGvexcel.CurrentCell.Value;
            dgv_spaltzahl_ausles = dGvexcel.ColumnCount;
            eingabe_kontrolle.set_check_admin(verbindung_zu_definitionen.getUsername());

            //Daten aus dgv lesen ermitteln
            for (dgv_spaltzahl_reell_ausles = dgv_spaltzahl_ausles - 1; dgv_spaltzahl_reell_ausles >= 0; dgv_spaltzahl_reell_ausles--)
            {
                if (dGvexcel.Columns[dgv_spaltzahl_reell_ausles].Name == "Projektleiter")
                {
                    dgv_projektleiter_ausles = dGvexcel.Rows[dgv_index_ausles].Cells[dgv_spaltzahl_reell_ausles].Value;
                }

                if (dGvexcel.Columns[dgv_spaltzahl_reell_ausles].Name == "Konstrukteur")
                {
                    dgv_konstrukteur_ausles = dGvexcel.Rows[dgv_index_ausles].Cells[dgv_spaltzahl_reell_ausles].Value;
                }

                if (dGvexcel.Columns[dgv_spaltzahl_reell_ausles].Name == "Projektnummer")
                {
                    dgv_projektnummer_ausles = dGvexcel.Rows[dgv_index_ausles].Cells[dgv_spaltzahl_reell_ausles].Value;
                }
            }

            //Benutzerfrage ob löschen oder nicht
            DialogResult AbfrageDGV = MessageBox.Show("Wollen Sie das ausgewählte Projekt:\n" + dgv_projektnummer_ausles + "\nwirklich löschen?\n" + "Index: " + dgv_index_ausles + "\n" + "Wert: " + dgv_wert_ausles + "\n" + "Spalten: " + dgv_spaltzahl_ausles + "\n" + "PL: " + dgv_projektleiter_ausles, "Projekt löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (AbfrageDGV == DialogResult.Yes)
            {
                if (verbindung_zu_definitionen.getUsername() == dgv_projektleiter_ausles.ToString() || eingabe_kontrolle.get_check_admin() == true)
                {
                    //Abfrage ob bereits Konstrukteur drin steht.
                    if (dgv_konstrukteur_ausles != null)
                    {
                        MessageBox.Show("Sie können das Projekt nicht löschen,\nda es bereits in Arbeit ist!\n\n Bitte mit dem entsprechenden Entwickler klären!", "Löschen nicht möglich!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }

                    //Excellaufruf einbauen und Zeile suchen und löschen
                    MessageBox.Show("USER Passt\n" + "PL: " + dgv_projektleiter_ausles + "\nKonstr: " + dgv_konstrukteur_ausles + "\nProjekt: " + dgv_projektnummer_ausles, "Excel", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    Microsoft.Office.Interop.Excel.Application dgv_projekt_loeschen_xlapp = new Microsoft.Office.Interop.Excel.Application();
                    dgv_projekt_loeschen_xlapp.Visible = false;
                    Workbook dgv_Projekt_loeschen_wb;
                    object missing = System.Reflection.Missing.Value;

                    try
                    {
                        zeile = 5;
                        string tmp_dgv_projektnummer_ausles = Convert.ToString(dgv_projektnummer_ausles);
                        System.Threading.Thread.Sleep(1000); //Kurze Wartetimer

                        dgv_Projekt_loeschen_wb = dgv_projekt_loeschen_xlapp.Workbooks.Open(
                                                    verbindung_zu_definitionen.getPfad(),
                                                    ExcelKonstanten.UpdateLinks.DontUpdate,
                                                    ExcelKonstanten.ReadWrite,
                                                    ExcelKonstanten.Format.Nothing,
                                                    "", // Passwort
                                                    "", // WriteResPasswort
                                                    ExcelKonstanten.IgnoreReadOnlyRecommended,
                                                    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                                                    "", // Trennzeichen
                                                    ExcelKonstanten.Editable,
                                                    ExcelKonstanten.Notify,
                                                    ExcelKonstanten.Converter.Default,
                                                    ExcelKonstanten.DontAddToMru,
                                                    ExcelKonstanten.Local,
                                                    ExcelKonstanten.CorruptLoad.NormalLoad
                                                  );

                        // Arbeitsblätter lesen
                        Sheets sheets = dgv_Projekt_loeschen_wb.Worksheets;
                        // ein Arbeitsblatt auswählen…
                        Worksheet dgv_Projekt_loeschen_ws = (Worksheet)sheets.get_Item("CM");

                        //Projektnummer suchen
                        do
                        {
                            zeile = zeile + 1;
                        } while (dgv_Projekt_loeschen_ws.Cells[zeile, 1].Value.ToString() != tmp_dgv_projektnummer_ausles);

                        //komplette Zeile löschen
                        dgv_projekt_loeschen_xlapp.Rows[zeile].Delete();            //löschen im Excel
                        dGvexcel.Rows.RemoveAt(dgv_index_ausles);                   //löschen im DGV

                        dgv_Projekt_loeschen_wb.Close(true, missing, false);        //Workbook schließen & speichern
                        dgv_projekt_loeschen_xlapp.Quit();                          //Excel beenden
                        System.Threading.Thread.Sleep(300);                         //Kurze Wartetimer


                    }
                    catch (Exception exc)
                    {
                        DialogResult AbfrageExcel = MessageBox.Show("Fehler beim Löschvorgang!\n\n" + exc + "\n\n" +
                                                                    "(Sollte der Fehler häufiger vorkommen, wenden Sie sich an\n....)", "Löschen fehlgeschlagen!!",
                                                                    MessageBoxButtons.OK,
                                                                    MessageBoxIcon.Error);
                        dgv_projekt_loeschen_xlapp.Quit();                         //Excel beenden

                    }

                }
                else
                {
                    MessageBox.Show("USER Passt nicht\n" + "PL: " + dgv_projektleiter_ausles + "\nKonstr: " + dgv_konstrukteur_ausles + "\nProjekt: " + dgv_projektnummer_ausles, "Excel", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            if (AbfrageDGV == DialogResult.No)
            {
                //keine Funktion
            }


        }//ENDE DGV ABfrag für löschen
T
156 Beiträge seit 2012
vor 10 Jahren

Hallo Edzio,

innerhalb des Event wird da nichts zu finden sein. Das ausschlaggebende dafür ist ja außerhalb des Event. Schaue doch einmal welches Event du abonniert hast.

Viele Grüße,
telfa

E
Edzio Themenstarter:in
68 Beiträge seit 2013
vor 10 Jahren

also falls du damit meinst,
wenn man auf des DGV im Desginer doppelklickt,
hier erstellte mir das Visual ein
dGexcel_CellContentclick event,
das ich dann umgeändert habe und in der Form1.Designer.cs angepasst habe,
🤔

ok
habe gerade alles was das DGV betrifft gelöscht, und neu erstellt
nun geht es,
schätze durch mein manuelles ändern, habe ich eine Kleinigkeit übersehen...

Danke vielmals Telfa