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

次に、[次へ] ボタンを使用してデータを調べたいと思います。また、クエリの個々の列は個別のラベルで表示する必要があります。ロードすると、1 番目のラベルは「Werner」、2 番目のラベルは「1」、3 番目のラベルは「1」と表示されます。次に押すと1stラベルに「Chris」、2ndラベルに「2」、3dラベルに「1」をもう一度押すと「Mike」などと表示されます。

誰かがこれで私を助けてくれますか?

4

2 に答える 2

3

BindingSourceと を組み合わせて使用​​しDataTableます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 に設定することもできます。コードを 1 行も書かずに、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から始まる整数値を使用し、次へ/前へをクリックして増減します

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 に答える