Zum Inhalt springen

Datagridview & Combobox


SwordMaster

Empfohlene Beiträge

Hallo Zusammen,

In meiner Anwendung verwende ich ein DataGridView (ohne DB!) und in einer Spalte soll man Werte aus einer Combobox auswählen können.

Das Problematische: Die Combobox soll keine Einschränkung sein, der User soll komplett neue Einträge direkt in die Zelle schreiben können. Und die Combobox soll sich dann (falls der direkt eingegebene Wert neu ist, um diesen Wert erweitern).

Ich bin auch schon ganz gut unterwegs... Hier mein Code:


        private void Form1_Load(object sender, EventArgs e)

        {

            m_grid_view.Columns.Add("Spalte1", "Spalte1");


                DataGridViewComboBoxColumn test = new DataGridViewComboBoxColumn();

                test.Items.Add("abc");

                test.Items.Add("def");

                m_grid_view.Columns.Add(test);

                m_grid_view.EditingControlShowing +=

                        new DataGridViewEditingControlShowingEventHandler(

                        dataGridView1_EditingControlShowing);


                m_grid_view.CellValidating +=

                           new DataGridViewCellValidatingEventHandler

                               (dataGridView1_CellValidating);


            }

            private void dataGridView1_EditingControlShowing(object sender,

        DataGridViewEditingControlShowingEventArgs e)

            {

                if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl))

                {

                    DataGridViewComboBoxEditingControl cbo = e.Control as DataGridViewComboBoxEditingControl;

                    cbo.DropDownStyle = ComboBoxStyle.DropDown;

                    //cbo.TextChanged += new EventHandler(cbo_TextChanged);

                    //cbo.Leave += new EventHandler(cbo_Leave);

                }


            }

            private void dataGridView1_CellValidating

                (object sender, DataGridViewCellValidatingEventArgs e)

            {

                CellValidate(e.FormattedValue.ToString());


            }


            private void CellValidate(string value)

            {

                DataGridViewComboBoxCell cell =

                    m_grid_view.CurrentCell as DataGridViewComboBoxCell;


                if (cell != null &&

                    !cell.Items.Contains(value))

                {


                    // Insert the new value into position 0

                    // in the item collection of the cell

                    cell.Items.Insert(0, value);

                    // When setting the Value of the cell, the  

                    // string is not shown until it has been

                    // comitted. The code below will make sure 

                    // it is committed directly.

                    if (m_grid_view.IsCurrentCellDirty)

                    {

                        // Ensure the inserted value will 

                        // be shown directly.

                        // First tell the DataGridView to commit 

                        // itself using the Commit context...

                        m_grid_view.CommitEdit

                            (DataGridViewDataErrorContexts.Commit);

                    }

                    // ...then set the Value that needs 

                    // to be committed in order to be displayed directly.

                    cell.Value = cell.Items[0];

                }

                else

                {

                    if (cell != null)

                        cell.Value = cell.Items[cell.Items.IndexOf(value)];

                }



            }

Das Problem ist, im DataGridView ist die letzte Zeile ja immer für "Neue Zeilen" da... Hier kann der User was eintragen, und das DataGridView verlängert sich automatisch um eine Zeile.

Wenn der User aber jetzt in der "neuen Zeile" in der Spalte direkt einen Wert eintippt, dann wird dataGridView1_CellValidating nicht aufgerufen :(

Der User muss also zuerst einen Wert in der Combobox auswählen, damit die Zeile "bestätigt" wird, und erst dann funktioniert das CellValidating ereigniss...

Habt ihr eine Idee wie ich mein Problem lösen kann?

Viele Grüße

Stefan

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Zusammen,

In meiner Anwendung verwende ich ein DataGridView (ohne DB!) und in einer Spalte soll man Werte aus einer Combobox auswählen können.

Das Problematische: Die Combobox soll keine Einschränkung sein, der User soll komplett neue Einträge direkt in die Zelle schreiben können. Und die Combobox soll sich dann (falls der direkt eingegebene Wert neu ist, um diesen Wert erweitern).

Du hast ne GridView in der 2 Spalten sind... in einer kann man was eintragen in der andren was durch die combobox auswählen.... falls er was neues reinschreibt soll sich die combobox aktualisieren um den Wert der eingetragen wordn ist.... falls schon vorhanden soll er das in der combobox selektieren...

ich frag mich wo der sinn davon ist mir fällt jetzt spontan nix ein wo man sowas usen könnte wenn in der nächsten spalte schon die combobox ist...

versuchmal die ereignisse übern designer zu regris... und verwend das ereignis CellValidated.

und verwend mal


m_grid_view.CellValidated += new DataGridViewCellEventHandler(this.deine_Methode);

und übergib deiner Methode kein
DataGridViewCellValidatingEventArgs e 

Objekt, sondern versuchs mal mit
DataGridViewCellEventArgs e 

sollte normal dein Problem lösen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...