2017-02-10 4 views
0

У меня есть приложение winforms на C#, в котором пользователь должен выбрать данные из combobox, эти элементы затем перечислены в listbox. Проблем у меня есть следующие: Если пользователь выбирает элемент результат появится в порядке, но если он выбирает другой пункт старых результатов не получите очищенные, поэтому я использую строку:C# добавить столбцы в список и удалить элементы списка

listView1.Items.Clear(); 

Однако, если я использую эта строка кода, результаты не будут отображаться полностью, отсутствуют строки.

код у меня есть:

SqlDataAdapter sda = new SqlDataAdapter(@"select [desc],[enchimento] from vidros where desempenho = @emp", con); 
    sda.SelectCommand.Parameters.Add("@emp", SqlDbType.NVarChar).Value = desempenho.Text; 
    DataTable DTT = new DataTable(); 
    sda.Fill(DTT); 

    for (int i = 0; i < DTT.Rows.Count; i++) 
    { 
     listView1.Items.Clear(); 
     DataRow dr = DTT.Rows[i]; 
     ListViewItem listitem = new ListViewItem(dr["desc"].ToString()); 
     listitem.SubItems.Add(dr["desc"].ToString()); 
     listitem.SubItems.Add(dr["enchimento"].ToString()); 
     listView1.Items.Add(listitem); 
    } 

Вторая проблема, у меня есть 2 поля, что я хочу, чтобы отобразить в окне списка (по убыванию и enchimento), но ListBox отображает только один из них.

+0

Может быть, вы могли бы присоединиться к ним, например: listitem.SubItems.Add (д-р [ "desc"]. ToString() + "" + dr ["enchimento"]. ToString()); –

+0

Я думаю, что есть методы select и unselect для listview. Попробуйте с intellisense, и я думаю, что есть возможности легко решить вашу проблему. – Joshit

+0

@FedericoNavarrete благодарит, что разрешил отображение 2-х элементов. теперь мне просто нужно очистить старые выборы – septaug

ответ

1

Вы звоните listView1.Items.Clear()внутри петля.

Итак, на каждой итерации цикла вы удаляете все элементов и добавляете один новый. Так что только последний остается в списке.

Переместить линию перед тем цикл:

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["desc"].ToString()); 
    listitem.SubItems.Add(dr["enchimento"].ToString()); 
    listView1.Items.Add(listitem); 
} 
0

Pl

Please use like below ExP: 
 

 
    string InputValue="12"; 
 

 
     List<string> listView1 = new List<string>(); 
 
     using (SqlConnection conn = new SqlConnection()) 
 
     { 
 
      List<string> terms = InputValue.Split(',').ToList(); 
 
      terms = terms.Select(s => s.Trim()).ToList(); 
 

 
      //Extract the term to be searched from the list 
 
      string searchTerm = terms.LastOrDefault().ToString().Trim(); 
 

 
      //Return if Search Term is empty 
 
      if (string.IsNullOrEmpty(searchTerm)) 
 
      { 
 
       return new string[0]; 
 
      } 
 

 
      //Populate the terms that need to be filtered out 
 
      List<string> excludeTerms = new List<string>(); 
 
      if (terms.Count > 1) 
 
      { 
 
       terms.RemoveAt(terms.Count - 1); 
 
       excludeTerms = terms; 
 
      } 
 

 
      conn.ConnectionString = ConfigurationManager 
 
        .ConnectionStrings["CON"].ConnectionString; 
 
      using (SqlCommand cmd = new SqlCommand()) 
 
      { 
 
       string query = "select [desc],[enchimento] from vidros where " + 
 
       " desempenho = @emp"; 
 

 
       cmd.CommandText = query; 
 
       cmd.Parameters.AddWithValue("@emp", searchTerm); 
 
       cmd.Connection = conn; 
 
       conn.Open(); 
 
       using (SqlDataReader sdr = cmd.ExecuteReader()) 
 
       { 
 
        while (sdr.Read()) 
 
        { 
 
         listView1.Add(string.Format("{0}-{1}", sdr["desc"], sdr["enchimento"])); 
 
        } 
 
       } 
 
       conn.Close(); 
 
      } 
 
      return listView1.ToArray();