2017-02-10 8 views
0

У меня есть приложение winforms в C# с несколькими comboboxes. эти comboboxes отображают данные из базы данных SQL. Я могу получить comboboxes для отображения данных в listview, но я хочу фильтровать данные. Например, пользователь выбирает значение в combobox1, и результаты появляются, но когда он выбирает значение в combobox 2, будут отображаться только соответствующие значения с правилами от combobox1. это как создание фильтра, но я не могу понять, как я могу взаимодействовать между списками. код у меня есть:C# использовать comboboxes для фильтрации данных sql

private void desempenho_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      SqlDataAdapter sda = new SqlDataAdapter(@"select [desc],[enchimento],[compo] from vidros where desempenho = @emp", con); 
      sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text; 
      DataTable DTT = new DataTable(); 
      sda.Fill(DTT); 
      listView1.Items.Clear(); 
      for (int i = 0; i < DTT.Rows.Count; i++) 
      { 
       DataRow dr = DTT.Rows[i]; 
       ListViewItem listitem = new ListViewItem(dr["desc"].ToString()); 
       listitem.SubItems.Add(dr["enchimento"].ToString()); 
       listitem.SubItems.Add(dr["compo"].ToString()); 
       listView1.Items.Add(listitem); 
      } 
     } 
     private void valu_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      SqlDataAdapter SDA2 = new SqlDataAdapter(@"select [desc],[enchimento],[compo] from vidros where valu = @emp2", con); 
      SDA2.SelectCommand.Parameters.Add("@emp2", SqlDbType.NVarChar).Value = valu.Text; 
      DataTable DTT2 = new DataTable(); 
      SDA2.Fill(DTT2); 
      listView1.Items.Clear(); 
      for (int i = 0; i < DTT2.Rows.Count; i++) 
      { 
       DataRow dr = DTT2.Rows[i]; 
       ListViewItem listitem = new ListViewItem(dr["desc"].ToString()); 
       listitem.SubItems.Add(dr["enchimento"].ToString()); 
       listitem.SubItems.Add(dr["compo"].ToString()); 
       listView1.Items.Add(listitem); 
      } 

Это только для двух из Наримера, но когда я получаю это один работает все остальное будет просто.

Спасибо заранее,

+0

Вместо того, чтобы повторять код SelectedIndexChanged в каждом случае, вы должны иметь один обработчик событий, который вы вызываете из каждой комбо, который анализирует значение всех комбо комбо и строит набор результатов из этих данных. – stuartd

ответ

2

Это должно сделать что-то, что вам нужно. Его псевдо и непроверенный код, но будут перебирать каждый из комбо-боксов на вашей форме, а затем вы можете делать то, что вы хотите со значением в списке

void Main() 
{ 
var cb1 = new ComboBox() 
var cb2 = new ComboBox() 
var frm = new Form() 

var selectedItemAndValue = new List<selectedItem>(); 

foreach (Control ctrl in frm.Controls) 
{ 
    if (ctrl.GetType() == typeof(ComboBox) 
    { 
     var cb = ctrl as ComboBox 
     selectedItemAndValue.Add(new selectedItem { 
     Idx = cb.SelectedIndex, 
     Text = cb.SelectedText, 
     Value = cb.SelectedValue.ToString()}) 

    } 

    //the above code will then give you a list of everything that is selected in each of your combo boxes 
} 
} 

public class selectedItem 
{ 

public int Idx { get; set; } 
public string Text { get; set; } 
public string Value {get; set;} 
} 



// Define other methods and classes here