对象引用未设置为对象ascx的实例

时间:2012-05-19 17:51:21

标签: c# asp.net sql ascx

我想知道这段代码有什么问题,它会返回此错误“对象引用未设置为对象的实例”,我无法理解为什么。

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]);
}

我尝试过不同的方法,但总是出现同样的错误。

2 个答案:

答案 0 :(得分: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++;
        } 

答案 1 :(得分:1)

创建数组后必须创建Label对象。其次获取计数数据和再次调用行是不好的。你可以单独调用数据库来做到这两点。我在你的代码中做了一些调整。

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]);
}