0

我想循环使用标签组件从查询中获取的一些数据。

这是我获取数据并读取数据的代码:

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

现在我想使用我的 NEXT 按钮来浏览数据。查询中的每一列都必须显示在单独的标签中。所以在加载时,第一个标签将显示“Werner”,第二个标签“1”,3d 标签“1”。点击下一个将在第一个标签中显示“克里斯”,第二个标签“2”和 3d 标签“1”再次点击下一个将显示“迈克”等

有人可以帮我吗?

4

2 回答 2

3

将 aBindingSourceDataTable和结合使用DataBindings

要么在表单上放置一个并设置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 逻辑。

于 2012-12-06T10:21:27.490 回答
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 开始并通过单击 next / prev 来增加/减少它

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 或大于列表大小并且你完成了,请添加一些验证。

于 2012-12-06T10:37:00.300 回答