0

VS 2005 でデバイス アプリケーションを作成しています。

「info」というリストを作成し、フォームのラベルにリストの値を入力したいと考えています。これは私のコードです:

public List<String> info = new List<String>();
int i = 0;


private void populateinfo()
    {
        conn.Open();
        string query;
        query = "select distinct dp.current_location_code,dci.dest_location_code,dps.order_no,dps.company_id_no,dps.no_of_full_cartons,dps.dc_grv_id_no,s.sku_code from dc_pallet_stock dps, dc_pallet dp,sku s , purch_order_carton_sku pocs , dc_crane_instruc dci where dp.pallet_id_no = dps.pallet_id_no and dps.order_no = pocs.order_no and dps.company_id_no = pocs.company_id_no and dps.carton_code = pocs.carton_code and s.sku_id_no = pocs.sku_id_no and s.company_id_no = dps.company_id_no and dp.pallet_id_no = '" + palletId + "' and dci.pallet_id_no(+) = dps.pallet_id_no";
        OracleCommand cmd = new OracleCommand(query, conn);
        OracleDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            this.info.Add(dr["order_no"].ToString());
        }
        dr.Close();
        conn.Close();
    }

private void frmInfo_Load(object sender, EventArgs e)
    {
        populateinfo();
        lbl3.Text = this.info[++i];
    {

でエラーが発生していますlbl3.Text = this.info[++i];

指定された引数は有効な値の範囲外です。パラメーター名: インデックス。

これは私が現時点でテストしている方法ですが、最後にクエリのすべての列を別々のラベルで表示したいのですが、どうすればよいですか。または、それを行うより良い方法はありますか?Gridview はオプションではありません。

前もって感謝します。

4

3 に答える 3

1

私がおそらく行うことは、ラベルの配列またはラベルのリストを作成することです。ラベルを動的に作成してフォームに追加する例を次に示します。

public List<String> info = new List<String>();
public List<Label> labels = new List<Label>();

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
     populateinfo();
     for (int i = 0; i < info.Count; i++)
     {
         labels.Add ( new Label(){Name="lbl"+i+1, Text=info[i], 
                                  Font = new Font("Arial",8),
                                  ForeColor= Color.Blue});

     }
     placelabels();
}

private void placelabels()
{
    int topvalue = 0;
    foreach (Label item in labels)
    {
        item.Left = 0;
        item.Top = topvalue;
        this.Controls.Add(item);
        topvalue += 20;

    }
}

そして、既存のラベルをリストに追加する方法

public List<String> info = new List<String>();
public List<Label> labels = new List<Label>();

public Form1()
{
    InitializeComponent();
    labels.Add(label1);
    labels.Add(label2);
    labels.Add(label3);
    labels.Add(label4);
    labels.Add(label5);
}

private void Form1_Load(object sender, EventArgs e)
{
     populateinfo();
     if (labels.Count > info.Count)
     {
         for (int i = 0; i < info.Count; i++)
         {
             labels[i].Text = info[i];
         }
     }
     else
     {
         for (int i = 0; i < labels.Count; i++)
         {
             labels[i].Text = info[i];
         }
     }

}
于 2012-12-28T07:33:58.240 に答える
0

このように使ってみてください。

...
    while (dr.Read())
     {
            lbl3.Text += dr["order_no"].ToString() + "\n";
     }
...
于 2012-12-28T06:43:07.927 に答える
0

選択クエリの palletId が正しくありませんでした。コンストラクタを参照してください:

public List<String> info = new List<String>();
int i = 0;

public frmInfo(string palletId)
    {
        InitializeComponent();
        this.palletId = palletId;
    }

private void populateinfo()
{
    conn.Open();
    string query;
    query = "select distinct dp.current_location_code,dci.dest_location_code,dps.order_no,dps.company_id_no,dps.no_of_full_cartons,dps.dc_grv_id_no,s.sku_code from dc_pallet_stock dps, dc_pallet dp,sku s , purch_order_carton_sku pocs , dc_crane_instruc dci where dp.pallet_id_no = dps.pallet_id_no and dps.order_no = pocs.order_no and dps.company_id_no = pocs.company_id_no and dps.carton_code = pocs.carton_code and s.sku_id_no = pocs.sku_id_no and s.company_id_no = dps.company_id_no and dp.pallet_id_no = '" + palletId + "' and dci.pallet_id_no(+) = dps.pallet_id_no";
    OracleCommand cmd = new OracleCommand(query, conn);
    OracleDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        this.info.Add(dr["order_no"].ToString());
    }
    dr.Close();
    conn.Close();
}

private void frmInfo_Load(object sender, EventArgs e)
{
    populateinfo();
    lbl3.Text = this.info[++i];
{
于 2012-12-28T09:47:02.720 に答える