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太好了,如果有什么不清楚的地方,请告诉我。请记住标出你的答案。(计票下方的复选框)