Announcement

Collapse
No announcement yet.

DataGridViewComboBoxCell aufgeklappt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • DataGridViewComboBoxCell aufgeklappt

    Hallo,

    ich suche eine Möglichkeit die von einer ComboBox bekannte DroppedDown Methode auch mit einer DataGridViewComboBoxCell zu realisieren.

    Ich weiss, das sich in der der DataGridViewComboBoxCell die DataGridViewComboBoxEditingControl befindet, die diese Methode hat. Leider finde ich keinen sinnvollen Weg diese irgendwie anzusprechen.

    Ich kann sie zwar über das Event "EditingControlShowing" ermitteln, aber da ist es mir eigentlich schon zu spät.

    Meine Idee ist es im GridView einen Button zu drücken, der mir dann in der selben Zeile an einer bestimmten Column eine DataGridViewComboBoxCell erstellt und diese sollte aber geöffnet sein, so wie eine ComboBox.DroppedDown = true;

    Gibt es irgendjemand der eine Idee hat, wie ich das DataGridViewComboBoxEditingControl recht frühzeitig, also direkt nach dem erzeugen der DataGridViewComboBoxCell referenzieren oder ermitteln kann???

    Vielen Dank für Lösungsansätze schon mal im Voraus!

  • #2
    Häng Dich doch ans RowsAdded des DataGridView. Immer wenn eine Zeile hinzugefügt wird kannst Du für jedes DataGridViewComboBoxEditingControl in der Zeile einen EventHandler definieren.

    Bei RowsRemoved analog zu oben den EventHandler wieder entfernen.

    Comment


    • #3
      Wie genau mache ich das?

      [highlight=c#]
      private void DataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
      {

      }
      [/highlight]
      e hat leider keine DataGridViewComboBoxEditingControl Eigenschaft

      oder müsste ich sender irgendwie casten?

      Könnstest du das vielleicht kurz konkretisieren?

      Danke!
      Zuletzt editiert von fanderlf; 11.01.2010, 11:05. Reason: code highlighting eingefügt

      Comment


      • #4
        [highlight=c#]
        private void grdModules_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
        for(int i=e.RowIndex; i<e.RowIndex+e.RowCount; i++)
        {
        DataGridViewRow row = grdModules.Rows[i];

        DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell) row.Cells[1];
        }
        }
        [/highlight]

        OK ganz so einfach gehts wohl doch nicht. Mein Gedanke war das man über die DataGridViewCell Property einfach an das EditingControl kommt. Ich könnte mir aber vorstellen, dass das gar nicht existiert, wenn die Zeile einfach nur angezeigt wird. Ich denke da gibts wohl keinen anderen Weg als über EditingControlShowing.

        Comment


        • #5
          Originally posted by fanderlf View Post
          ganz so einfach gehts wohl doch nicht. Mein Gedanke war das man über die DataGridViewCell Property einfach an das EditingControl kommt. Ich könnte mir aber vorstellen, dass das gar nicht existiert, wenn die Zeile einfach nur angezeigt wird. Ich denke da gibts wohl keinen anderen Weg als über EditingControlShowing.
          Davon gehe ich auch aus. (Ich hatte mich mal intensiver mit EditingControlShowing und eigener DGV-Spalte befasst.) Ein bestimmtes Control wird innerhalb einer Zelle erst dann angezeigt, wenn diese Zelle zur Bearbeitung aktiviert wird. Das DGV enthält beispielsweise für alle seine Zellen genau eine ComboBox; diese ist standardmäßig ausgeblendet und wird erst bei Bedarf innerhalb einer Zelle eingeblendet und steht dann (d.h. durch EditingControlShowing) für Vorarbeiten u.ä. zur Verfügung.

          Warum soll die ComboBox durch den Button geöffnet werden, ohne dass sie aktiviert ist? Das Ausklappen hat doch nur Sinn, wenn etwas ausgewählt werden kann. Dann kann sie doch zu diesem Zeitpunkt bereits aktiviert werden, sodass EditingControlShowing zur Verfügung steht.

          Gruß Jürgen

          Comment


          • #6
            Okay... zur Erläuterung meines DGVs einige Sätze:

            Ich habe keine DataGridComboBoxColumn sondern nur eine normale TextBoxColumn. Wenn ich den Button drücke, dann soll an der Stelle eine DataGridViewComboBoxCell erstellt werden und diese nach Möglichkeit geöffnet, damit schnell ersichtlich ist, was ausgewählt werden kann.

            Bisher ist es dann so, das ich nach der Erstellung der ComboBox diese erst anklicken muss, dann erst wird der Event EditingControlShowing geworfen. Das zwingt mich also die ComboBox doch noch mal zu öffnen und dann ist sie schon offen, was meine droppedDown-Methode überflüssig machen würde.

            Was ich eigentlich möchte ist, ein Button drücken, ComboBox wird erstellt und ist offen, ich wähle ein Element und ich speicher alles und stelle es dann wieder als Text dar. Aber wenn es das so nicht handhaben geht, dann finde ich mich auch damit ab!

            Frage mich nur, warum das Element so eingeschränkt worden ist... nicht einmal SelectedValue ist ohne weiteres zu ermitteln... nun ja... Danke!

            Comment


            • #7
              Originally posted by Jürgen Thomas View Post
              Warum soll die ComboBox durch den Button geöffnet werden, ohne dass sie aktiviert ist? Das Ausklappen hat doch nur Sinn, wenn etwas ausgewählt werden kann. Dann kann sie doch zu diesem Zeitpunkt bereits aktiviert werden, sodass EditingControlShowing zur Verfügung steht.
              Ich würde das ja genauso gerne machen wollen... Button drücken und ComboBox aktivieren und dann öffnen und zum Auswählen bereit sein!!!

              Wie mach ich das?

              Comment


              • #8
                Originally posted by ThomasHertel View Post
                Ich würde das ja genauso gerne machen wollen... Button drücken und ComboBox aktivieren und dann öffnen und zum Auswählen bereit sein!!!

                Wie mach ich das?
                Naja, indem du eine DataGridViewComboBoxColumn benutzt, den Focus auf die Zelle setzt und über EditingControlShowing die Liste per DropDown=true aufklappst. Aber wie es mit einer DataGridViewTextBoxColumn, der eine ComboBox übergestülpt wird, gehen sollte, bleibt mir schleierhaft.

                Frage mich nur, warum das Element so eingeschränkt worden ist... nicht einmal SelectedValue ist ohne weiteres zu ermitteln... nun ja...
                Vielleicht weil es primär ein Control zur Anzeige sein sollte; schließlich heißt es DataGridView. Außerdem ist es sowieso schon ziemlich komplex. Ein Formular würde viele Ressourcen verbraten, wenn z.B. für drei ComboBox-Spalten und 317 Zeilen bereits beim Einlesen der Daten 3x317 ComboBoxen (die übergroße Anzahl davon außerhalb des sichtbaren Bereichs) erzeugt werden müssten.

                Gruß Jürgen

                Comment

                Working...
                X