2012-12-06 79 views
0

我想遍歷從使用標籤組件的查詢中獲得的一些數據。使用標籤組件循環遍歷數據C#

這是我的代碼來獲取數據,並閱讀:

private void populatelblDesc() 
    { 
     conn.Open(); 
     string query; 
     query = "select de.emp_username, poc.order_no , poc.company_id_no from dc_emp de, purch_order_carton poc"; 
     OracleCommand cmd = new OracleCommand(query, conn); 
     OracleDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      lblDesc.Text = dr["emp_username"].ToString(); 
     } 
     dr.Close(); 
     conn.Close(); 
    } 

該查詢返回:

**EMP_USERNAME**   **ORDER_NO**  **COMPANY_ID_NO** 
Werner     1     1 
Chris      2     1 
Mike      1     2 
Marc      3     1 

現在我想用我的下一個按鈕來通過數據。查詢中的每個單獨列都必須顯示在單獨的標籤中。因此在裝載時,第一個標籤將顯示「Werner」,第二個標籤「1」,第三個標籤「1」。打到下一個將顯示「克里斯」在1ste標籤,第二個標籤「2」和3d標籤「1」再次擊中將顯示「邁克」等等

有人可以幫我這個嗎?

+0

在每個'dr.Read()'條件下,您將獲得下一條記錄.. –

回答

1

保存在某處列表你的價值觀:通過點擊下一個/上

List<String> LabelTextList = new List<String>(); 
private void populatelblDesc() 
{ 
    conn.Open(); 
    query = "select emp_username from dc_emp"; 
    OracleCommand cmd = new OracleCommand(query, conn); 
    OracleDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     this.LabelTextList.add(dr["emp_username"].ToString()); 
    } 
    dr.Close(); 
    conn.Close(); 
} 

然後用一個整數值,從0開始增加/減少它

int i = 0; 
public void next(){ 
    if (i+1 < this.LabelTextList.Count()) 
     lblText.text = this.LabelTextList[++i]; 
} 
public void prev(){ 
    if (i-1 >= 0) 
     lblText.text = this.LabelTextList[--i]; 
} 

,如果你添加一些驗證越來越低於0或大於列表大小,你就完成了。

+0

謝謝。這工作!只有2個問題。當我到達最後一個值並再次點擊時,我收到一個異常:「指定的參數超出了有效值範圍。參數名稱:index」顯然,這是因爲沒有更多的數據,但我該如何解決這個問題? 然後最後一個問題:我有一個不同的表單,我需要做同樣的事情,但有更大的查詢。每當我運行它我得到「IndexOutOfRange」... –

+0

@WernervandenHeever看我的編輯。 – dognose

+0

謝謝你的完美。我要編輯我的整個問題。我認爲這已經足夠,它會幫助我,但我遇到了其他問題。如果您有時間,請再次閱讀我的問題。非常感謝! –

3

使用BindingSource結合DataTableDataBindings

可以在表單上放一個,然後將bs.DataSource設置爲表格或動態創建一個。

var table = new DataTable(); 
table.Load(reader); 
var bs = new BindingSource(table, null); 
lblDesc.DataBindings.Add("Text", bs, "emp_username"), 

btnNext.Click +=() 
{ 
    bs.MoveNext(); 
}; 

btnPrev.Click +=() 
{ 
    bs.MovePrevious(); 
}; 

你甚至可以減少您的窗體上的BindingNavigator並設置bindingNavigator1.BindingSource您的BindingSource。它將管理First/Previous/Next/Last邏輯,而不需要一行代碼。