2016-07-13 11 views
0

In meinem Projekt Bestücken ich eine Datenbank wie dieseC# eine Combobox von Datagridview mit Bedingungen

ID | Name | Function 
1 | John | CH 
2 | Maria | CD 
3 | Nikita | CH 
4 | Carin | CH 

mit Ich verwende dieses Stück Code, um die Combobox mit allen Namen zu füllen:

DataTable dt = new DataTable("Person"); 
dt.Columns.Add("ID", typeof(string)); 
dt.Columns.Add("Name", typeof(string)); 
dt.Columns.Add("Function", typeof(string)); 

for (int i = 0; i < dataGridView.Rows.Count; i++) 
    dt.Rows.Add(MyComboBox.Items.Add(dataGridView[2, i].Value.ToString() 

Nun möchte Ich mag die Combobox mit nur einige Namen zu füllen, mit einer Formel wie folgt aus:

für jeden Namen mit CH Funktion -> Anzeige d dieser Name in MyCombobox

Ich bin fest damit, könnten Sie mir helfen?

+0

Bitte beschreiben Sie es mehr oder geben Sie mehr Code –

+0

Wie sind Sie Databinding der Datagridview? Es scheint einfacher zu sein, dieselben Daten zu verwenden und sie nur zu filtern und dann die Combobox zu binden. Oder noch besser, führen Sie eine andere Abfrage für die Datenbank mit der Funktion-Spalte als where-Klausel. – Esko

Antwort

0

Versuchen Sie, diese

MyComboBox.Items.Clear(); 
foreach (DataGridViewRow row in dataGridView.Rows) 
{ 
    if (row.Cells["Function"].Value!=null && row.Cells["Function"].Value.Equals("CH")) 
    MyComboBox.Items.Add(row.Cells["Name"].Value.ToString()); 
} 
+0

tel mir, wenn es funktioniert sonst geben Sie mehr Code auf die Frage. Ich gebe dir Antwort, wie ich deinen Code verstehe. –

+0

Perfekt, es ist was ich gesucht habe :) – Sidav

0

ist es richtig Lassen Sie tun!

Die DataTable ist für Daten Speicher ausgelegt.
DataGridView und ComboBox sind für Daten ausgelegt repräsentieren.

Puts Daten in DataTable

DataTable dt = new DataTable("Person"); 

dt.Columns.Add("ID", typeof(string)); 
dt.Columns.Add("Name", typeof(string)); 
dt.Columns.Add("Function", typeof(string)); 

dt.Rows.Add("1", "John", "CH"); 
dt.Rows.Add("2", "Maria", "CD"); 
dt.Rows.Add("3", "Nikita", "CH"); 
dt.Rows.Add("4", "Carin", "CH"); 

Bind Rohdaten DataGridView

dataGridView.DataSource = dt; 

Jetzt müssen wir gefilterten Daten an den ComboBox

DataView view = dt.AsDataView(); 
view.RowFilter = "Function = 'CH'"; 
comboBox.DisplayMember = "Name"; 
comboBox.DataSource = view; 

Bereit zu binden! Wenn Sie die Daten in DataGridView ändern, werden diese Änderungen automatisch in ComboBox angezeigt.

Zum Beispiel ändern Sie den Function Spaltenwert CH-CD für John, und er verschwindet aus den ComboBox.

Außerdem können Sie die Filterbedingungen dynamisch ändern.

Geben

view.RowFilter = "Function = 'CD'"; 

Voila! Die ComboBox zeigt jetzt andere Namen.