2013-03-04 4 views
0

У меня есть форма с ListBox и класс базы данных. Форма вызывает метод из базы данных, которая возвращает строку.Элементы списка и выбранный элемент

public listItem() 
    { 
     InitializeComponent(); 
     Db = new Database(); 
     itemList = new List<string>(); 
     showAllItems(); 
    } 

Теперь showAllItems-функция вызывает Db.getAllitems() функция, которая возвращает список.

private void showAllItems() 
    { 
     itemList = Db.getAllItems(); 
     lb_itemList.DataSource = itemList; 
    } 

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

Моя основная проблема заключается в том, что я не знаю, как вернуть несколько данных, не отображая все данные в списке. Я просто хочу, чтобы имя в ListBox и другие данные, которые будут отображаться рядом с ListBox на этикетке зависит от выбранного пункта из ListBox

public List<string> getAllItems() 
    { 
     List<string> itemList = new List<string>(); 
     SQLiteConnection connection = new SQLiteConnection("Data Source=HCI.db"); 
     connection.Open(); 

     SQLiteCommand cmd = new SQLiteCommand("SELECT rid, name, category, price, status, specific FROM items", connection); 
     SQLiteDataReader reader = cmd.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       //itemList.Add(reader.GetString(reader.GetInt64(rid))); 
       itemList.Add(reader.GetString(reader.GetOrdinal("name"))); 
       itemList.Add(reader.GetString(reader.GetOrdinal("category"))); 
       itemList.Add(reader.GetString(reader.GetOrdinal("price"))); 
       itemList.Add(reader.GetString(reader.GetOrdinal("status"))); 
       itemList.Add(reader.GetString(reader.GetOrdinal("specific"))); 

      } 
     } 
     connection.Close(); 
     return itemList; 

    } 

ответ

1

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

public class YourClass{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public decimal Price { get; set; } 
    public string Description { get; set; } 
} 


public List<YourClass> getAllItems() 
{ 
List<string> itemList = new List<string>(); 
SQLiteConnection connection = new SQLiteConnection("Data Source=HCI.db"); 
connection.Open(); 

SQLiteCommand cmd = new SQLiteCommand("SELECT rid, name, category, price, status, specific FROM items", connection); 
SQLiteDataReader reader = cmd.ExecuteReader(); 

if (reader.HasRows) 
{ 
    while (reader.Read()) 
    { 
     //itemList.Add(reader.GetString(reader.GetInt64(rid))); 
     itemList.Add(new YourClass(){ 
     Id = reader.GetString(reader.GetInt64("Id")), 
     Name = reader.GetString(reader.GetOrdinal("name")), 
     Description = reader.GetString(reader.GetOrdinal("desc")), 
     Price = reader.GetString(reader.GetOrdinal("price")) 
});    

    } 
} 
connection.Close(); 
return itemList; 

} 

//in your selectedindexchanged event 
private void lb_itemList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (lb_itemList.SelectedIndex > -1) 
    { 
      var item = lb_itemList.SelectedItem as YouClass; 
      if (item != null) 
      { 
       lblDescription.Text = item.Description; 
       lblPrice.Text = item.Price 
      } 
    } 
} 
+0

Итак, вы имеете в виду, я оставляю это так. Просто введите имя с помощью этого метода, а затем напишите другой метод, который получает идентификатор, зависящий от выбранного элемента в ListBox, и получает остальные данные? Если да, то как я могу получить определенные данные из списка ? Предположим, что я сохраняю описание и цену в этом списке, как я могу особенно назвать только убыток или цену? – loomie

+0

Если это так, вы можете создать класс, содержащий всю необходимую информацию, и использовать его для создания списка вместо строки. Я отредактировал свой ответ выше, чтобы показать, как создать пользовательский класс, а затем привязать его непосредственно к вашему списку. – masterlopau

1

Создание пользовательских Class так:

public class Item 
{ 
    public string Name; 
    public string Description; 
} 

затем изменить способ возврата:

public List<Item> getAllItems() 
{ 
     List<Item> itemList = new List<Item>(); 
     SQLiteConnection connection = new SQLiteConnection("Data Source=HCI.db"); 
     connection.Open(); 

     SQLiteCommand cmd = new SQLiteCommand("SELECT rid, name, category, price, status, specific FROM items", connection); 
     SQLiteDataReader reader = cmd.ExecuteReader(); 

     if (reader.HasRows) 
     { 
      while (reader.Read()) 
      { 
       //itemList.Add(reader.GetString(reader.GetInt64(rid))); 
       var item = new Item(); 
       item.Name = reader.GetString(reader.GetOrdinal("name")); 
       item.Description = reader.GetString(reader.GetOrdinal("specific")) 
       itemList.Add(item); 
      } 
     } 
     connection.Close(); 
     return itemList; 
} 

и привязать его к вашему списку, как что:

private void showAllItems() 
{ 
     itemList = Db.getAllItems(); 
     lb_itemList.DisplayMember = "Name"; 
     lb_itemList.DataSource = itemList; 
} 

и последний инструмент SelectedIndexChanged примечание к описанию:

private void lb_itemList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     if (lb_itemList.SelectedIndex > -1) 
     { 
       var item = lb_itemList.SelectedItem as Item; 
       if (item != null) 
       { 
        lblDescription.Text = item.Description; 
       } 
     } 
} 
Смежные вопросы