2016-05-03 18 views
2

Ich muss das Combobox-Steuerelement mit Elementen verwenden, die in der DataGridView-Spalte überprüft werden können. Also ich habe eine Kontrolle auf dem folgenden Link gefunden https://github.com/sgissinger/CheckBoxComboBox/Verwenden von benutzerdefinierten CheckBoxComboBox in DataGridView-Spalte

In diesem Grunde CheckBoxComboBox funktioniert gut in der Demo und es hat DataGridViewCheckBoxComboBoxColumn Klasse erweitert, die in Datagridview für eine einzelne Spalte verwendet werden können.

Jetzt, wenn diese Spalte in DataGridView zur Entwurfszeit hinzugefügt wird und DataGrid zum Hinzufügen neuer Zeilen aktiviert ist, gibt ParseFormattedValue(), wenn eine Daten in eine andere Spalte eingefügt und Wert aus dieser Spalte ausgewählt wird, null Ausnahme.

Auch wenn eine neue Zeile mit Code hinzugefügt wird, gibt GetFormattedValue() eine Null-Ausnahme im Wertparameter davon aus.

In DataGridView habe ich zwei Spalten hinzugefügt, eine ist einfache Textfeldspalte und eine andere ist DataGridViewCheckBoxComboBoxColumn Hinzufügen Wochentag Namen darin.

Jetzt, wenn ich versuche von

dataGridView1.Rows.Add(); 

seine Vorführung Ausnahme in GetFormattedValue() als null kommt in Wertparameter der es um eine neue Zeile hinzuzufügen.

Antwort

2

Die Verwendung von benutzerdefinierten CheckBoxComboBox-Steuerelement in DataGridView ist abgeschlossen. Zuerst habe ich eine DataGridViewTextBoxColumn oder eine andere gemäß Ihrer Anforderung hinzugefügt und dann die benutzerdefinierte CheckBoxComboBox-Spalte in dieser DataGridView auf folgende Weise hinzugefügt. Zuerst müssen Sie die Liste der Elemente zu schaffen, in diesem Kombinationsfeld

List<Status> statuses = new List<Status>(); 
statuses.Add(new Status(1, "Sunday")); 
statuses.Add(new Status(2, "Monday")); 
statuses.Add(new Status(3, "Tuesday")); 
statuses.Add(new Status(4, "Wednesday")); 
statuses.Add(new Status(5, "Thursday")); 
statuses.Add(new Status(6, "Friday")); 
statuses.Add(new Status(7, "Saturday")); 

gezeigt werden, dann müssen Sie das Objekt von DataGridViewCheckBoxComboBoxColumn erstellen

DataGridViewCheckBoxComboBoxColumn comboboxColumn = new DataGridViewCheckBoxComboBoxColumn(); 

ein Objekt von ListSelectionWrapper erstellen aus dieser Liste Objektstatus und legen Sie die TextSeparator-Eigenschaft fest. In

ListSelectionWrapper<Object> wrappedList = new ListSelectionWrapper<Object>(statuses); 
wrappedList.TextSeparator = comboboxColumn.TextSeparator; 

comboboxColumn andere Eigenschaften als

comboboxColumn.DataSource = wrappedList; 
comboboxColumn.ValueMember = "Selected"; 
comboboxColumn.DisplayMemberSingleItem = "Name"; 
comboboxColumn.DisplayMember = "NameConcatenated"; 

Und dann legen Sie die Spalte in Datagridview

dgvKioskList.Columns.Add(comboboxColumn); 

Danach Ihre Spalte in der Datagridview eingesetzt ist.Jetzt eine neue Zeile mit einzufügen einige Listenelemente vorgewählten, müssen Sie wie

Dictionary<String, Object> objSelectedDays = new Dictionary<String, Object>(); 

ein Dictionary-Objekt erstellen Wenn Sie den Sonntag und Dienstag von der ComboBox beispielsweise auswählen möchten, könnten Sie schreiben

objSelectedDays.Add("Sunday", statuses[0]); 
objSelectedDays.Add("Tuesday", statuses[2]); 

Danach, wenn Sie eine neue Zeile in Datagridview mit Ihren anderen Daten einfügen und dieses objSelectedDays Objekt, wird die neue Zeile Raster

hinzugefügt werden
datagridView1.Rows.Add("ID1", objSelectedDays); 

wo „ID1“ i s eingeführt in einfache DataGridViewTextBoxColumn

Wenn Sie die ausgewählten Werte aus dem Datenraster lesen wollen, dann geben Sie die Zelle in Dictionary-Objekt wie

var values = datagridView1.Rows[0].Cells[1].Value as Dictionary<String, Object>; 

gegossen und dann Schleife, obwohl die Werte Array-Objekt aus den ausgewählten Werten lesen die einzelnen Zeilen CheckBoxComboBox-Steuerelement

Verwandte Themen