2017-01-12 25 views
0

Ich habe eine Datagridview in meinem Windows-Formular Anwendung. Die Datagridview hat 3 Spalten. Erste Spalte ist Combobox. Ich versuche, ein Element zur Combo-Box hinzuzufügen, aber es funktioniert. Hier ist der Code (Sprache C#)Hinzufügen von Elementen zu Combobox in einer bereits vorhandenen datagridview comboBox-Spalte

foreach (int counter=0; counter<5; counter++) 
     { 
     this.dataGridView1.Rows.Add(); 

     DataGridViewComboBoxCell cbCell = new DataGridViewComboBoxCell(); 
     cbCell.Items.Add("Male"); 
     cbCell.Items.Add("Female");     
     dataGridView1.Rows[counter].Cells[0] = cbCell; 

     dataGridView1.Rows[counter].Cells[1].Value = firstname[counter]; 

     dataGridView1.Rows[counter].Cells[2].Value = lastname[counter];      

    } 

Das Gitter 5 Reihen zeigt. Aber die erste Combo-Box-Spalte hat kein Element in jeder Combo-Box von denen.

Bitte helfen. Danke.

Antwort

1

Da der Code nicht zeigt, wie die Spalten aufgebaut sind, ist es schwierig zu sagen, was das Problem sein könnte, aber der Code verwendet nicht die DataGridViewComboBoxColum. Die DataGridViewComboBoxColumn ist alles, was Sie brauchen, um jede Zeile in Spalte 0 ein Kombinationsfeld mit "Male", "Female" Wahlen zu machen.

Die fehlerhafte foreach-Schleife ist falsch und wird nicht kompiliert. Ich nehme an, eine for Schleife ist, was Sie gesucht haben. Nach dieser for Schleife ... wird eine neue Zeile korrekt zum Gitter hinzugefügt. Dann wird eine neue DataGridViewComboBoxCell erstellt und die Zelle [0] der aktuellen Zeile hinzugefügt. dataGridView1.Rows[counter].Cells[0] = cbCell;. Diese Zelle [0] wird jeder neuen Zeile hinzugefügt.

Dies ist nicht erforderlich, wenn die DataGridViewViewComboBoxColumn richtig eingerichtet ist. Hinzufügen der DataGridViewComboBoxCell ist absolut gültig und ermöglicht es Ihnen, eine Combo-Box in eine "SINGLE" Zelle zu setzen. Es funktioniert jedoch, wenn es so verwendet wird, macht die Verwendung der Kombinationsbox selbst fragwürdig.

Die Schleife "fügt" Daten zu dataGridView1 hinzu. Während Sie in den Daten lesen, scheint der Teil über "Geschlecht" (männlich, weiblich) zu fehlen, so dass der Wert nicht wie die anderen Werte eingestellt ist. Beispiel: Es gibt nicht eine Zeile wie folgt:

dataGridView1.Rows[counter].Cells[0].Value = gender[counter]; 

Wenn es ein „Gender“ Array, das diese Informationen gehalten wird, dann, wenn der Code diesen Wert setzt (männlich, weiblich) in der Codezeile über dem Combo In der Boxspalte wird die Auswahl des Kombinationsfelds automatisch auf diesen Wert gesetzt. Die Daten werden nur "eins" (1) der zwei Werte sein.

Also vorausgesetzt, dies ist das, was Sie suchen der Code unten zeigt, wie das DataGridViewComboBoxColumn

Ein Wort der Vorsicht verwenden, wenn Daten in ein Kombinationsfeld Zelle zu lesen; Wenn die Zeichenfolgedaten für die Kombinationsfeldspalte NICHT mit einem der Elemente in der Listenliste der Kombinationsfelder übereinstimmen, stürzt der Code ab, wenn er nicht abgefangen und adressiert wird. Wenn der Wert eine leere Zeichenfolge ist, setzt das Kombinationsfeld den ausgewählten Wert auf leer.

// Sample data 
string[] firstname = { "John", "Bob", "Cindy", "Mary", "Clyde" }; 
string[] lastname = { "Melon", "Carter", "Lawrence", "Garp", "Johnson" }; 
string[] gender = { "Male", "", "Female", "", "Male" }; 
// Create the combo box column for the datagridview 
DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn(); 
comboCol.Name = "Gender"; 
comboCol.HeaderText = "Gender"; 
comboCol.Items.Add("Male"); 
comboCol.Items.Add("Female"); 
// add the combo box column and other columns to the datagridview 
dataGridView1.Columns.Add(comboCol); 
dataGridView1.Columns.Add("FirstName", "First Name"); 
dataGridView1.Columns.Add("LastName", "Last Name"); 
// read in the sample data 
for (int counter = 0; counter < 5; counter++) 
{ 
    dataGridView1.Rows.Add(gender[counter], firstname[counter], lastname[counter]); 
} 

Hoffe, das hilft.

+0

Vielen Dank JohnG –

Verwandte Themen