связывание нескольких списков c # - PullRequest
0 голосов
/ 15 сентября 2011

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

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

Рабочий пример (упрощенный):

private class CategoryItems
{
  public string Category { get; set; }
  public string Item { get; set; }

  public CategoryItems(string category, string item)
  {
    this.Category = category;
    this.Item = item;
  }

  public override string ToString()
  {
    return this.Item;
  }
}

private List<string> categories = new List<string>();
private List<CategoryItems> catItems = new List<CategoryItems>();

private void Form1_Load(object sender, EventArgs e)
{
  categories.Add("Cat 1");
  categories.Add("Cat 2");

  catItems.Add(new CategoryItems("Cat 1", "Cat 1 Item 1"));
  catItems.Add(new CategoryItems("Cat 1", "Cat 1 Item 2"));
  catItems.Add(new CategoryItems("Cat 2", "Cat 2 Item 1"));
  catItems.Add(new CategoryItems("Cat 2", "Cat 2 Item 2"));

  foreach (string cat in categories)
  {
    listBox1.Items.Add(cat);
  }
  listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  listBox2.Items.Clear();

  foreach (CategoryItems ci in catItems)
  {
    if (ci.Category == listBox1.SelectedItem.ToString())
      listBox2.Items.Add(ci);
  }
}
1 голос
/ 15 сентября 2011

Я создал winform с двумя списками: listbox1 и listbox2, и вот как выглядит мой Form1.cs

namespace WinFormsApp
{
    public partial class Form1 : Form
    {
        private List<Category> categories;

        public Form1()
        {
            InitializeComponent();

            categories = new List<Category>();

            var categoryOne = new Category { Name = "Category 1"} ;
            categoryOne.Items.Add( new CategoryItem { Name = "Item 1"} );

            var categoryTwo = new Category { Name = "Category 2" };
            categoryTwo.Items.Add( new CategoryItem { Name = "Item 2" } );

            categories.Add( categoryOne );
            categories.Add( categoryTwo );
        }

        private void Form1_Load(object sender, System.EventArgs e)
        {
            categoryBindingSource.DataSource = categories;
        }
    }

    public class Category
    {
        public string Name { get; set; }

        public List<CategoryItem> Items { get; private set; }

        public Category()
        {
            Items = new List<CategoryItem>();
        }
    }

    public class CategoryItem
    {
        public string Name { get; set; }
    }
}

и вот код InitializeComponent ()

            this.listBox1.DataSource = this.categoryBindingSource;
            this.listBox1.DisplayMember = "Name";
            this.listBox1.FormattingEnabled = true;
            this.listBox1.Location = new System.Drawing.Point(24, 24);
            this.listBox1.Name = "listBox1";
            this.listBox1.Size = new System.Drawing.Size(242, 238);
            this.listBox1.TabIndex = 0;
            this.listBox1.ValueMember = "Items";

            this.categoryBindingSource.DataSource = typeof(Category);

            this.listBox2.DataSource = this.itemsBindingSource;
            this.listBox2.FormattingEnabled = true;
            this.listBox2.Location = new System.Drawing.Point(286, 24);
            this.listBox2.Name = "listBox2";
            this.listBox2.Size = new System.Drawing.Size(276, 238);
            this.listBox2.TabIndex = 1;
            this.listBox2.ValueMember = "Name";

            this.itemsBindingSource.DataMember = "Items";
            this.itemsBindingSource.DataSource = this.categoryBindingSource;

enter image description here

0 голосов
/ 15 сентября 2011
  1. Иметь функцию, которая заполняет второе поле списка на основе содержимого первого.
  2. Добавить событие для случая изменения первого списка и вызвать функцию, описанную в # 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...