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]包含一个空值,因此错误。

至少在第一行之后添加这一行...

lbs[i] = new Label();

但是,仍然不清楚您在第二个循环中尝试做什么。
如果我正确理解您的代码,您可以用(lbs[i].Text)用户表中每个用户的昵称替换相同的标签文本,并以最后一个用户的昵称结尾。好像真的错了。

这可能是一个可行的解决方案

        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[] 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 回答