Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法将两个单独列表框中的两个值链接在一起?_C#_Visual Studio 2010_Listbox - Fatal编程技术网

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

C# 有没有办法将两个单独列表框中的两个值链接在一起?,c#,visual-studio-2010,listbox,C#,Visual Studio 2010,Listbox,我正在构建一个小应用程序,它将接受作为描述学生和顾问的输入信息。我为每个对象创建了一个类,输入信息后,两个对象都存储在单独的列表框中。问题是,我必须将学生班的实例与顾问班的实例联系起来,我甚至不知道从哪里开始。每个学生只能有一名顾问,但一名顾问可以与许多学生合作 我想我必须为顾问创建一个ID,因为现在我只从他们那里收集字符串信息,使用数字可能更容易。我不熟悉面向对象编程。我应该从哪里开始?你走的是正确的道路。我假设这些对象有一天会存储在某种持久性存储中(比如数据库),对吗 如果是,则为每个对象添

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


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

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

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

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

public List<Student> Students { get; set; }
listbox.ValueMember = "StudentID";
公共列表学生{get;set;}

有意义吗?

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 answer about relational data会很有帮助

编辑: 我刚刚注意到标题中的
Listbox
。要做到这一点,需要有一个具有ID和文本值的数据源

设置数据源:

listbox.DataSource = Students;
ID设置为列表框的ValueMember属性:

public List<Student> Students { get; set; }
listbox.ValueMember = "StudentID";
然后分别返回显示值:

listbox.DisplayMember = "StudentName";

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

您已经设置了listbox的数据源了吗?你只是想合并这些信息吗?一旦应用程序不再运行,数据就不需要存储,所以我只是想暂时将这两个值关联起来。一旦描述了每个对象的所有信息(名字、姓氏、专业、部门),它们就会存储在列表框中。一旦信息被存储,我所要做的就是能够在列表框中选择一个给定的值,并在表单的另一部分显示它的所有特征。非常简单,除了将多个学生分配给一名顾问,然后按需显示该信息。为什么要将学生分配给一名顾问而不存储该信息?该应用程序不是为实际应用而构建的,只是一些编程概念的练习,否则,我肯定会存储信息。我在将输入的信息存储到小型数据库方面没有任何经验,不过如果这相当简单的话,我不妨研究一下。它们不会存储在数据库中,只需要在表单运行时处于活动状态即可。我在考虑使用表单中的列表来存储所有学生实例,另一个用于存储所有顾问实例。有没有办法在列表中列出一个子列表,将特定的学生分配给特定的顾问?或者我最好在学生和顾问类中单独列出一份清单?我会在表单中保留一份顾问列表,并将上面提到的学生列表属性添加到顾问类中。这将使将接口元素绑定到顾问的学生集合变得更容易。或者,您可以维护学生列表、顾问列表以及将顾问映射到学生列表的词典。不过,我还是建议第一种选择。当然可以。祝你好运谢谢你把我介绍给林克,这看起来是我必须要做的。@cjharty太好了,如果有什么不清楚的地方,请告诉我。请记住标出你的答案。(计票下方的复选框)