Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Dropdown Items mit eigenen Unterpunkten
Garzec
myCSharp.de - Member



Dabei seit:
Beiträge: 52
Herkunft: Gießen / Hessen

Themenstarter:

Dropdown Items mit eigenen Unterpunkten

beantworten | zitieren | melden

Hallo,
aktuell habe ich ein Datagridview Element mit 3 Spalten

<Externes Bild entfernt>

Die erste Spalte ist eine DataGridViewTextBoxColumn, die zweite und dritte Spalte sind vom Typ DataGridViewComboBoxColumn. Ich möchte eine Spalte erzeugen, die Dropdown Elemente pro Zeile hat. Dabei ist es möglich, dass die Kinder wieder eigene Dropdown Elemente sind. Leider fehlt mir der richtige Begriff für das Element, daher zeige ich hier ein Bild und hoffe, dass mir jemand sagen kann, nach was genau ich suchen muss. Ich befürchte aber, dass das eine selbst geschriebene GUI Komponente ist.

<Externes Bild entfernt>

Die Tabelle auf dem gezeigten Bild verbindet die Spalte 2 und 3. Bei einer Zeile klickt man rechts auf den Button und es öffnet sich ein Kontext Menü. Manche Items haben dabei Unterpunkte. Für meinen Anwendungsfall brauche ich nur 2 Einträge (BatchFields und IndexFields (beides Arrays)) mit X Subitems pro Array.

Hat jemand eine Idee, wie man sowas bauen kann?

Bei Bedarf kann ich auch meinen Code posten, mit dem ich das Grid auf dem ersten Bild erstellt habe, aber ich glaube aktuell ist es hierfür uninteressant.

Ich hoffe, dass ich nur Starthilfe brauche, aber leider kann ich nicht erkennen, wie die es umgesetzt haben, daher bin ich für jede Info dankbar :)
private Nachricht | Beiträge des Benutzers
bredator
myCSharp.de - Member



Dabei seit:
Beiträge: 368

beantworten | zitieren | melden

Das sieht mir eher nach einem Kontextmenü aus, das für diesen Bedarf zweckentfremdet wurde.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15618
Herkunft: BW

beantworten | zitieren | melden

Keine externen Bilder
[Hinweis] Wie poste ich richtig? 6.1
Bilder daher entfernt.
private Nachricht | Beiträge des Benutzers
Garzec
myCSharp.de - Member



Dabei seit:
Beiträge: 52
Herkunft: Gießen / Hessen

Themenstarter:

beantworten | zitieren | melden

Bild 1 - Wie es sein soll
Attachments
private Nachricht | Beiträge des Benutzers
Garzec
myCSharp.de - Member



Dabei seit:
Beiträge: 52
Herkunft: Gießen / Hessen

Themenstarter:

beantworten | zitieren | melden

Bild 2 - Wie es aktuell ist
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Garzec am .
Attachments
private Nachricht | Beiträge des Benutzers
Garzec
myCSharp.de - Member



Dabei seit:
Beiträge: 52
Herkunft: Gießen / Hessen

Themenstarter:

beantworten | zitieren | melden

Ich habe nun (wie beim Bild zu sehen) mal ein Control erstellt, das ein Label, einen Button und ein Kontext Menü beinhaltet.

 private class AllocationControl : UserControl
    {
        public AllocationControl(IndexField[] indexFields, BatchField[] batchFields)
        {
            Label lbl = new Label();
            Controls.Add(lbl);

            ContextMenuStrip contextMenu = new ContextMenuStrip();
            // das Menü befüllen ...
            Controls.Add(contextMenu);

            Button btn = new Button();
            btn.Click += (object sender, EventArgs e) =>
            {
                contextMenu.Show(Cursor.Position);
            };
            Controls.Add(btn);
        }

        public string DisplayedName { get; private set; }
        public double SelectedID { get; private set; }
    }

Dieses UserControl möchte ich dann einer selbstgeschriebenen Zelle übergeben

    private class DataGridViewAllocationCell : DataGridViewCell
    {
        public DataGridViewAllocationCell()
        {
        }

        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            AllocationControl allocationControl = value as AllocationControl;
            Bitmap allocationControlImage = new Bitmap(cellBounds.Width, cellBounds.Height);
            allocationControl.DrawToBitmap(allocationControlImage, new Rectangle(0, 0, allocationControl.Width, allocationControl.Height));
            graphics.DrawImage(allocationControlImage, cellBounds.Location);
        }
    }

Und diese Zelle wird dann der selbstgeschriebenen Spalte hinzugefügt

    private class DataGridViewAllocationColumn : DataGridViewColumn
    {
        public DataGridViewAllocationColumn()
        {
            CellTemplate = new DataGridViewAllocationCell();
        }
    }

Bezüglich der DataGridViewAllocationCell werde ich aus dem Artikel
https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/how-to-host-controls-in-windows-forms-datagridview-cells

aber nicht so ganz schlau. Welche Eigenschaften sind zu überschreiben? Was für einen ValueType hat mein Control denn dann?

Hat jemand so etwas schon einmal gemacht und kann mir Hilfe bei den letzten Schritten Hilfestellung geben?
Attachments
private Nachricht | Beiträge des Benutzers