2013-04-12 103 views
0

我遇到問題搜索我的Arraylist。數組列表存儲了關於多個團隊的各種信息,例如他們的徽標的圖像路徑和團隊名稱等。它正在使用一個單獨的數據文件填充使用StreamReaderc#arraylist搜索混淆

我希望用戶輸入Textbox從Windows的形式,如隊名,然後因此,該程序將隨後搜索我的ArrayList的表示字符串並使用Form.Load程序

爲了把打開另一個表單,搜索團隊的信息將在屏幕上裝載了它簡單。

private void btn_Search_Click(object sender, EventArgs e) 
{ 
    //what code do I write here? 
} 

據我所知,我可能會稍微深入這裏,因爲我目前的編碼知識,所以幫助將不勝感激。

編輯:不幸的是,它必須是在arraylist,抱歉造成的不便。

+2

你爲什麼要用'ArrayList'而不是'List '? –

+0

你可以使用你如何填充數組列表? –

+0

爲什麼選擇Arraylist您使用的是哪個版本的C#? – adt

回答

4

如果你可以使用LINQ:

string nameToMatch = "Tigers"; //can you tell who's from Michigan? 
List<Team> teams = new ArrayList<Team>(); 
//fill team data here 

Team selected = teams.FirstOrDefault(t => t.TeamName.Equals(nameToMatch, StringComparison.OrdinalIgnoreCase)); 

這樣的事情應該工作。如果你想匹配所有的「部分匹配」的列表(這將文本完全一致,但允許搜索不區分大小寫,您可以瞭解其他選項here。)

,你可以這樣做,而不是:

List<Team> matchedTeams = teams.Select(t => t.TeamName.Contains(nameToMatch)); 

閱讀here對於擴展超載包含需要StringComparison枚舉值。

+1

我會先用* FirstOrDefault *然後檢查null - 因爲用戶可以在該文本框中輸入任何內容。 –

+0

@George編輯。 – Codeman

+0

-1:[不使用==比較字符串](http://msdn.microsoft.com/en-us/library/vstudio/cc165449.aspx) – zimdanen

1

如果你不熟悉LINQ就像我可以使用foreach循環。事情是這樣的:

String nameToMatch = textBox1.text; //read from the text box 
foreach (Object obj in Teams) 
{ 
    MyTeam team = (MyTeam)obj; //MyTeam is an object you could write that would store team information. 
    if (team.TeamName.ToUpper() == nameToMatch.ToUpper()) //case insensitive search. 
    { 
     FormTeam frmTeam = new FormTeam(team); //windows form that displays team info. 
     frmTeam.Visible = true; 
     break; //if team names are unique then stop searching. 
    } 
} 

最壞情況塞納里奧是非常糟糕的,但對我來說,至少,它更容易圍繞讓我的頭比LINQ。祝你好運,希望有所幫助。

+0

謝謝。這清理了很多東西。 – zac

+0

@zac沒問題,很樂意幫忙。 –

+0

再次掃描時我不確定您在這裏從文本框中讀取的內容。我明白if語句就是您發佈新表單的地方。但究竟是什麼「MyTeam」? – zac

0

你可以使用一些代碼這樣來填補你的ArrayList:

// ArrayList class object 
    ArrayList arrlist = new ArrayList(); 

    // add items to arrlist collection using Add method 
    arrlist.Add("item 1"); 
    arrlist.Add("item 2"); 
    arrlist.Add("item 3"); 
    arrlist.Add("item 4"); 
    arrlist.Add("item 5"); 

,並使用一些代碼像這樣在你的ArrayList

string teamName= this.txtTeamName.Text; 
// for loop to get items stored at each index of arrlist collection 
for (int i = 0; i < arrlist.Count; i++) 
{ 
    if(arrlist[i].toString()==teamName) 
     // open a new form for show the found team details 
} 

搜索它是改變cunstractor一個很好的做法您的「團隊詳細信息」表單中獲得「團隊名稱」

frmTeamDetails(team myteam) 

然後在代碼中使用此代碼FOR語句:

frmTeamDetals frm=new frmTeamDetals(teamName); 
frm.ShowDialog();