Laden...

Dropdown Items mit eigenen Unterpunkten

Erstellt von Garzec vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.414 Views
G
Garzec Themenstarter:in
50 Beiträge seit 2016
vor 5 Jahren
Dropdown Items mit eigenen Unterpunkten

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 😃

B
357 Beiträge seit 2010
vor 5 Jahren

Das sieht mir eher nach einem Kontextmenü aus, das für diesen Bedarf zweckentfremdet wurde.

16.806 Beiträge seit 2008
vor 5 Jahren

Keine externen Bilder
[Hinweis] Wie poste ich richtig? 6.1
Bilder daher entfernt.

G
Garzec Themenstarter:in
50 Beiträge seit 2016
vor 5 Jahren

Bild 1 - Wie es sein soll

G
Garzec Themenstarter:in
50 Beiträge seit 2016
vor 5 Jahren

Bild 2 - Wie es aktuell ist

G
Garzec Themenstarter:in
50 Beiträge seit 2016
vor 5 Jahren

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?