有没有办法将两个单独的列表框中的两个值链接在一起?

时间:2013-11-24 20:59:04

标签: c# visual-studio-2010 listbox

我正在构建一个小型应用程序,它接受描述学生和顾问的输入信息。我为每个人创建了一个类,一旦输入信息,两个对象都存储在单独的列表框中。问题是我必须将学生类的实例链接到Adviser类的实例,我不知道从哪里开始。每个学生只能有1名顾问,但顾问可以与许多学生一起工作。

我认为我必须为顾问创建一个ID#,因为我现在只收集他们的字符串信息,使用数字可能会更容易。我是面向对象编程的新手。我应该从哪里开始?

2 个答案:

答案 0 :(得分:1)

你走的是正确的道路。我假设这些对象有一天会被存储在某种持久存储中(就像数据库一样),对吗?

如果是,则为每个对象添加一个主键。说出您的学生对象的StudentID和您的顾问的AdviserID。然后,将AdviserID列添加到Student对象。这将以N..1关系将学生映射到顾问。

如果这些对象永远不会被持久化到数据库,那么只需将一组学生添加到您的Adviser对象即可。例如,您的Adviser对象可以具有以下对象属性:

public List<Student> Students { get; set; }

有意义吗?

答案 1 :(得分:1)

Linq将帮助您一起加入您的课程。

    private void ListBox1_SelectedValueChanged(object sender, EventArgs e)
    {
        if (ListBox1.SelectedIndex != -1)
        {
            var joined = (from s in Students
                          join a in Advisers on s.AdvisorsID equals a.AdvisorsID 
                          where a.AdvisorsID == ((Advisor)ListBox1.SelectedItem).AdvisorID
                          select new {a, s});
        }
    }

这将为您提供一个可以循环或用作UI对象的数据源的对象。

但是,您需要一些共同的字段才能将它们连接在一起。如果要从数据库中提取信息,请使用@Ryans关于关系数据的答案。

编辑: 我刚刚在标题中注意到Listbox。执行此操作的customary way是拥有一个具有ID和文本值的数据源。

设置数据源:

listbox.DataSource = Students;

ID设置为Listbox的ValueMember属性:

listbox.ValueMember = "StudentID";

然后分别显示值:

listbox.DisplayMember = "StudentName";

然后你可以使用我上面的LINQ代码从结构中提取正确的代码。