2013-04-26 23 views
0

我想知道如何去引用每個數據循環,以便我可以將它傳遞給文本框。 如果有5個循環,我怎樣才能選擇第三個循環顯示在我的主窗體的文本框中? 我已經添加了m_intNumberofEvents來計算它所做的循環次數,但我不知道如何連接它,或者它甚至可以工作。請幫忙!謝謝!我該如何修改此方法,以便可以引用或傳遞每個單獨循環的數據?

public List<Event> ExtractData(DateTime dtmDay) 
{ 
    int intChosenDay = dtmDay.Day; 
    m_intNumberofEvents = 0; 
    int intFileDay; 

    StreamReader textIn = new StreamReader(
     new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read)); 

    //create the list 
    List<Event> events = new List<Event>(); 

    string[] lines = File.ReadAllLines(path); 

    for (int index = 4; index < lines.Length; index += 5) 
    { 
     Event special = new Event(); 
     special.Day = Convert.ToInt32(lines[index - 4]); 
     special.Time = (lines[index - 3]); 
     special.Price = Convert.ToDouble(lines[index - 2]); 
     special.StrEvent = lines[index - 1]; 
     special.Description = lines[index]; 
     events.Add(special); 
     m_intNumberofEvents++; 
    } 
    textIn.Close(); 
    return events; 
    } 
+4

「5個循環」通常不好,你可能會考慮重構你的代碼! – David 2013-04-26 08:20:13

+0

理論上,它可能是100個循環,具體取決於文本文件的大小。 – Jae 2013-04-26 08:21:00

+0

@Jae只是爲了澄清,循環或迭代?我真的很困惑你的意思。我在給定的代碼中看到只有一個循環,並且在運行時它們不會被添加(至少在正常環境中它們不應該添加)。 – Leri 2013-04-26 08:22:02

回答

2

我可能是錯在你的要求,但在循環之後,你將有Event對象的列表,如果你只是想用第3項(即一個居住在第三循環),那麼你可以從列表中把它就像這樣:

Event thridEvent = events[2];//NOTE: 0 based index 
//do something with the event, like populate a textbox 

你可以在你想要的清單,0 = 1,1 = 2,2 = 3,等訪問任何物品......

你也不要」 t需要統計它所做的循環次數,你可以從列表長度中得到相同的值:

int numberOfLoops = events.Count(); 

還值得一提的是,你有沒有驗證您的輸入文件,如果輸入的數據是不是在你的應用程序會崩潰的預期格式。

+0

這有助於很多!但現在我遇到了一個不同的問題...這是我的組合框的selectedIndexChanged事件.... private void cboEvent_SelectedIndexChanged( object sender,System.EventArgs e) { Event numberofevents = events [mvwDate_DateChanged]; txtDescription.Text = Convert.ToString(numberofevents); } – Jae 2013-04-26 08:32:31

+0

@Jae:...和它有什麼問題?如果這與這個問題無關,那麼你需要自己嘗試並解決它,或者提出一個新問題 – musefan 2013-04-26 08:34:06

+0

我有一個錯誤突出顯示了「events [mvwDate_DateChanged]部分。它說」最好的重載方法匹配'系統.Collections.Generic.List .this [int]'有一些無效參數。「不確定無效參數在哪裏/什麼內容.... – Jae 2013-04-26 08:34:46

0

你可以提取你的邏輯放到一個單獨的方法來簡化從String []數組提取事件對象:

Event ReadEventFromIndex(string[] lines, int index) 
{ 
    index = 4 + index * 5; 
    Event special = new Event(); 
    special.Day = Convert.ToInt32(lines[index - 4]); 
    special.Time = (lines[index - 3]); 
    special.Price = Convert.ToDouble(lines[index - 2]); 
    special.StrEvent = lines[index - 1]; 
    special.Description = lines[index];  

    return special; 
} 

注意如何我邏輯索引轉換爲所需做index = 4 + index * 5;訪問lines[]偏移

然後如果你想,說,第三項(這將是在邏輯索引2,當然不是3),你可以只是做:

var thirdEvent = ReadEventFromIndex(lines, 2); 
+0

這是一個2維數組嗎?原始問題使用2維數組來抓取我試圖使用列表進行轉換的文本數據... – Jae 2013-04-26 08:44:14

+0

@Jae「原始問題」是否指您在問題中沒有發佈的某些代碼?因爲您發佈的代碼中沒有2D數組...我在上面的答案中發佈的代碼會爲指定的索引返回一個單獨的Event;沒有二維數組。 – 2013-04-26 08:51:14

+0

是的,我不太熟悉索引。數據是否仍然載入列表中?當你說我想要第三個項目時,你的意思是第三組數據(日,時間,價格,strevent,描述)?有沒有辦法從第三組中檢索「special.Day」? – Jae 2013-04-26 09:02:36

相關問題