while (reader.Read())
{
treeSetA[i] = new treeNodesDB();
treeSetA[i].nodeClass = "son";
treeSetA[i].nodeName = reader.GetString(1);
treeSetA[i].nodeLevel = reader.GetInt32(5);
treeSetA[i].fatherNode = reader.GetString(3);
treeSetA[i].nodeExplain = reader.GetString(4);
i++;
}
这个代码在第一次循环时所填充的数据是没错的。但第二次开始就会把当前节点和之前已经填充好的节点数据又重新用新的数据填充了。
像第一个节点时 treeSetA[0].nodeName 值是“管理中心的”,当第二个循环时treeSetA[1].nodeName和treeSetA[0].nodeName 里的值全都变成了“第一分组”了。请高手指点。
{
treeSetA[i] = new treeNodesDB();
treeSetA[i].nodeClass = "son";
treeSetA[i].nodeName = reader.GetString(1);
treeSetA[i].nodeLevel = reader.GetInt32(5);
treeSetA[i].fatherNode = reader.GetString(3);
treeSetA[i].nodeExplain = reader.GetString(4);
i++;
}
这个代码在第一次循环时所填充的数据是没错的。但第二次开始就会把当前节点和之前已经填充好的节点数据又重新用新的数据填充了。
像第一个节点时 treeSetA[0].nodeName 值是“管理中心的”,当第二个循环时treeSetA[1].nodeName和treeSetA[0].nodeName 里的值全都变成了“第一分组”了。请高手指点。
应该写个List或者什么的 List<treeNodesDB> saveList = new List<treeNodesDB>();
while (reader.Read())
{
treeNodesDB treeSetA = new treeNodesDB();
treeSetA .nodeClass = "son";
treeSetA .nodeName = reader.GetString(1);
treeSetA.nodeLevel = reader.GetInt32(5);
treeSetA.fatherNode = reader.GetString(3);
treeSetA.nodeExplain = reader.GetString(4);
i++;
saveList.Add(treeSetA);
}
之前的定义是这样滴。。 treeSetA = new treeNodesDB[nodeConstant];
移出while以外,试一下
out treeNodesDB[] treeSetA
创建数组:
treeSetA = new treeNodesDB[nodeConstant];
循环内再创建元素类型和赋值
while (reader.Read())
{
treeSetA[i] = new treeNodesDB();
treeSetA[i].nodeClass = "son";
treeSetA[i].nodeName = reader.GetString(1);
treeSetA[i].nodeLevel = reader.GetInt32(5);
treeSetA[i].fatherNode = reader.GetString(3);
treeSetA[i].nodeExplain = reader.GetString(4);
i++;
}
这可不行。。因为未实例化元素的话是无法赋值滴
treeSetA = new treeNodesDB[nodeConstant];这句话是声明。。而
treeSetA[i] = new treeNodesDB();
才是实例化类型了,如果不用这步编译是会出错滴
while (reader.Read())
{
//打印出 reader.GetString(1)看是否是相同的
treeSetA[i] = new treeNodesDB();
treeSetA[i].nodeClass = "son";
treeSetA[i].nodeName = reader.GetString(1);
treeSetA[i].nodeLevel = reader.GetInt32(5);
treeSetA[i].fatherNode = reader.GetString(3);
treeSetA[i].nodeExplain = reader.GetString(4);
i++;
}
如果reader.Read()出来的内容都是不同的,那么,是不会出现你的问题的。测试代码 public class treeNodesDB
{
public String nodeClass { set; get; }
public String nodeName { set; get; }
public String nodeLevel { set; get; }
public String fatherNode { set; get; }
public String nodeExplain { set; get; }
}
//winform测试可以改成Button_click事件
protected void Page_Load(object sender, EventArgs e)
{
int i = 0;
treeNodesDB[] treeSetA = new treeNodesDB[10];
while (i < 10)
{
treeSetA[i] = new treeNodesDB();
treeSetA[i].nodeClass = "son";
treeSetA[i].nodeName = "A" + i.ToString();
treeSetA[i].nodeLevel = "B" + i.ToString();
treeSetA[i].fatherNode = "C" + i.ToString();
treeSetA[i].nodeExplain = "D" + i.ToString();
i++;
} for (i = 0; i < treeSetA.Length; i++)
{
//输出内容
Response.Write("<li>" + treeSetA[i].nodeName);
}
}
OleDbDataReader类读数据库
的问题了。那就去找你的treeNodesDB的定义的问题或者你使用 treeNodesDB[] 的地方有问题,这不是很明显的道理吗?你要学会分析和调试,而不是在这里等,说了半天了,你都没有贴出你的代码,神仙也帮不了你啊。拷贝14楼的代码测试,如果你的treeNodesDB定义是那样的,是不会有问题的。