Laden...

DataGridView: ComboBoxen in einer Spalte nur in den Zellen mit mehreren Werten

Erstellt von AlexDozer vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.859 Views
Hinweis von herbivore vor 12 Jahren

Abgeteilt von ComboBox and Listview anpassen: Schriftgröße und Zeilenhöhe

A
AlexDozer Themenstarter:in
54 Beiträge seit 2010
vor 12 Jahren

Aber kann ich mit einer DataGridView auch nur in einem einzelnen Feld eine ComboBox anzeigen?

Nicht alle Felder einer Spalte haben mehrere Werte, so das ich nur bei Feldern mit mehreren Werten eine ComboBox anzeigen möchte.

F
84 Beiträge seit 2008
vor 12 Jahren

Hallo,

du kannst für jede einzelne Spalte den Typ seperat festlegen.
Das DataGridView ist wirklich angenehm einfach zu benutzen und sehr flexibel 😃

Gruß,
fod

2.298 Beiträge seit 2010
vor 12 Jahren

Du könntest für die Zeilen, in denen nur ein Wert angezeigt wird MaxDropDownItems auf 1 setzen für die Spalte mit der Combobox. Alternativ, wenn die Daten nicht änderbar sein sollen, könntest du das Feld ReadOnly setzen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

A
AlexDozer Themenstarter:in
54 Beiträge seit 2010
vor 12 Jahren

Also ich checks grad irgendwie net.

Ich hab eine DataTable. In dieser sind die Spalten für die DataGridView definiert. Diese DataTable ist sozusagen die DataSource des DataGridViews


Instructions = new DataTable("Instructions");
Instructions.Columns.Add(new DataColumn("Num", typeof(String)));
Instructions.Columns.Add(new DataColumn("Instructions", typeof(String)));

_dataGridInstructions.DataSource = Instructions;

Wie mache ich jetzt aus der ersten Spalte eine ComboBox, und wie definiert man die möglichen Werte. Ich Netz find ich irgendwie kein einfaches Beispiel 😦

Gruß Alex

2.298 Beiträge seit 2010
vor 12 Jahren

Du kannst auch IList's und ähnliches Binden.

Du hättest also deine Klasse:


public class MyClass
{
     private string _sNum;
     public string Num
     {
         get { return _sNum; }
         set { _sNum = value; }
     }

    private List<string> _instructions = new List<String>();
    public List<string> Instructions
    {
        get { return _instructions; }
    }
}

Anschließend erstellst du deine Liste...


private List<MyClass> DoSomeThing()
{
     List<MyClass> myObjects = new List<MyClass>();
     MyClass testObject = new MyClass();
     testObject.Num = "1";
     testObject.Instructions.AddRange(new string[] { "Do something", "Do something else", "do also anything else" });

     myObjects.Add(testObject);
    // ....

    return myObjects;
}

private void BindMyList(List<MyClass> myObjects)
{
      DataGridViewTextBoxColumn clm = new DataGridViewTextBoxColumn();
      clm.HeaderText = "Num";
      clm.DataPropertyName = "Num";
      this.DataGridView.Columns.Add(clm);

      DataGridViewComboBoxColumn clmCombo = new DataGridViewComboBoxColumn();
      clmCombo.HeaderText = "Instructions";
      clmCombo.DataPropertyName = "Instructions";
  
      this.DataGridView.Columns.Add(clmCombo);

      this.DataGridView.DataSource = myObjecst;
}

Sollte so schon fast funktionieren... du solltest aber das Erstellen der Spalten nicht wie ich in dem zusammen gehackten Beispiel direkt vor dem Binden machen .

// Edit:
so ganz ist mein Testcode nicht stimmig, habs selber mal probiert. - Aber das sollte dir einen Ansatz geben, wo du beginnen kannst.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

5.299 Beiträge seit 2008
vor 12 Jahren

Wie mache ich jetzt aus der ersten Spalte eine ComboBox, und wie definiert man die möglichen Werte. Ich Netz find ich irgendwie kein einfaches Beispiel 😦

Also mit untypisiertem Dataset schoma gar nicht (doch, kann sein, es gibt Cracks die sich auch das antun - aber ein _einfaches _Beispiel dazu kann es gar nicht geben)

Für typisiertes Dataset gugge "JoiningView" auf Movie-Tuts, oder "M_N_Relation" dortselbst.

Oder gugge DataBinding-Uebungen an.

Der frühe Apfel fängt den Wurm.

A
AlexDozer Themenstarter:in
54 Beiträge seit 2010
vor 12 Jahren

Also ich habs jetzt hingekriegt.

Mein Problem war eigentlich nur das ich nicht wusste wie ich die ComboBox mit der Column aus der DataTable verbinde, aber inflames2k hat mir dank seinem Beispiel den Weg erleuchtet 😃


DataGridViewComboBoxColumn.DataPropertyName = "Num";