0

リストボックスとデータベースクラスを持つフォームがあります。フォームは、文字列を返すデータベースからメソッドを呼び出します。

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の横のラベルに表示したい。

私の主な問題は、リストボックスにすべてのデータを表示せずに複数のデータを返す方法がわからないことです。リストボックスから選択した項目に応じて、リストボックスの名前と他のデータをラベルのリストボックスの横に表示したいだけです

    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;

    }
4

2 に答える 2

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
          }
    }
 }
于 2013-03-04T10:07:30.707 に答える
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;
              }
        }
}
于 2013-03-04T10:16:19.430 に答える