2013-04-13 65 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的本地中,以便您可以進行高亮顯示等操作。