2013-04-13 62 views
0

我一直在努力尝试理解ArrayList,但我遇到了一个问题,其中包含我的搜索功能的最后部分。以新表格加载搜索结果

我有一个数组列表,设置为从StreamReader获取数据。数据由与团队有关的众多属性组成,例如他们的名字和他们徽标的图像路径。

然后我创建了一个搜索,扫描整个数组列表,查看用户通过文本框输入的特定字符串。

然后我创建了一个if语句来打开一个新窗体,如果该搜索返回true。

我想新的表格根据搜索的数据加载团队的每个属性。例如,如果我搜索“利物浦”,它会拿出经理姓名,体育场名称以及新形式的搜索名称。我不知道该怎么做。

我真的可以想到的唯一工具是load.event过程,但我找不到有关将其链接到数组列表的很多信息。

private void btn_Search_Click(object sender, EventArgs e) 
    { 
     foreach (Object obj in allTeams) 
     { 
      Team = (Team)obj; 
      if (team.teamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search. 
      { 
       FormTeam frmTeam = new FormTeam(Team); //windows form that displays team info. 
       frmTeam.Visible = true; 
       break; 
      } 
     } 

    } 

上面是我的搜索功能。 (我没有使用List<T>,因为它要求所有东西都必须存储在ArrayList中。)

是我想实现的目标吗?如果是的话如何?

回答

0

此外,你可能想在你的ArrayList

foreach(var team in allTeams.OfType<Team>()) 
{ 
    if(team.TeamName.Equals(nameToMatch, StringComparison.InvariantCultureIgnoreCase)) 
    { 
     frmTeam = new FormTeam(Team); 
     Aplication.Run(frmTeam); // or frmTeam.Show(); 
     break; 
    } 
} 

使用Linq您TeamForm类的构造函数中,你只需要给从Team-对象的所有值的表中的字段。

public FormTeam (Team team) 
{ 
    teamName.Text = team.TeamName; // label or something 
    teamPlayerCount.text = team.PlayerCount.ToString(); 
    ... 

} 
+0

对不起,延迟回复。我仍然试图解决这个问题。我没有使用LINQ,因为我对c#没有那么自信。您在第1部分中演示的方法。那不仅仅是仅显示团队名称吗?我只想从一个搜索值中显示出团队的每个属性(经理,体育场)。 – zac

+0

是的,你必须实现所有你需要的,我看到你的构造函数接受整个teamobject。我会解决这个问题。 – CSharpie

+0

这仍然让我感到困惑。澄清第1部分意味着要返回搜索结果,如果真的启动新的表单。然后将第二部分的代码设置为新创建表单的第一个方法。由于构造函数接受整个对象,我将每个值都分配给例如'teamName.Text = team.TeamName;'到类似文本框或标签的对象?很抱歉,因为我知道这样做似乎很乏味。 – zac

0

如果您需要搜索诸如teamName之类的字符串,最好使用类似于Dictionary<string,Team>而不是Arraylist的东西。然后,你可以做

Team t = dic[nameToMatch.ToUpper()]; 

其中DIC是Dictionary<string,Team>包含所有您的团队的实例。

0

首先,你在那里缺少一个变量名。我想你的意思是

foreach (Object obj in allTeams) 
    { 
     Team t = (Team)obj; 
     if (t.teamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search. 
     { 
      FormTeam frmTeam = new FormTeam(t); //windows form that displays team info. 
      frmTeam.Visible = true; 
      break; 
     } 
    } 

但是为什么不用一个类型化的泛型列表,不必做所有这些傻事。

但是你的问题是“我怎么能通过我搜索到的新形式”,对吗?我会将FormTeam的构造函数更改为FormTeam(Team t, string nameToMatch)之类的值,并将值保存在TeamForm的本地中,以便您可以进行高亮显示等操作。