1

このコードの何が問題になっているのか知りたいのですが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが返され、その理由がわかりません。

int count = com.Execute("select * from users").Rows.Count;
Label[] lbs = new Label[count];
for (int i = 0; i < count; i++)
{
    foreach (DataRow item in com.Execute("select * from users;").Rows)
    {
        lbs[i].Text = item["nickname"].ToString();
    }
    panel.Controls.Add(lbs[i]);
}

私はさまざまな方法を試しましたが、常に同じエラーです。

4

2 に答える 2

2

ラベル用のスペース(配列)を作成しましたcountが、ラベルを作成していません。
したがって、この行lbs[i]にはnull値が含まれているため、エラーが発生します。

少なくとも最初の行の後にこの行を追加してください...

lbs[i] = new Label();

ただし、2番目のループで何をしようとしているのかはまだ明確ではありません。
コードを正しく理解している場合は、同じラベルテキスト(lbs[i].Text)を、テーブルusersにある各ユーザーのニックネームに置き換え、最後のユーザーのニックネームで終わります。本当に間違っているようです。

それは実用的な解決策になる可能性があります

        DataTable dt = com.Execute("select * from users").Rows; 
        Label[] lbs = new Label[dt.Rows.Count]; 
        int i = 0;
        foreach (DataRow item in dt.Rows) 
        { 
            lbs[i] = new Label();
            lbs[i].Text = item["nickname"].ToString(); 
            panel.Controls.Add(lbs[i]);
            i++;
        } 
于 2012-05-19T17:54:17.017 に答える
1

配列を作成した後、Labelのオブジェクトを作成する必要があります。次に、カウント用のデータを取得し、再度行を呼び出すのは適切ではありません。データベースへの1回の呼び出しで両方を実行できます。私はあなたのコードにいくつかの調整を加えました。

Label[] lbs = new Label[count];

foreach (DataRow item in com.Execute("select * from users;").Rows)
{
      lbs[i] = new Label();
      lbs[i].Text = item["nickname"].ToString();
      panel.Controls.Add(lbs[i]);
}
于 2012-05-19T18:14:14.657 に答える