asp.net做一个treeview数据绑定

绑定子节点时查询出来的数据正确,但在进行数据绑定时一直索引溢出

然后调试 ... 调试 ... 再调试...

依然很崩溃  想到了是变量定义后面共用后的问题,然而并没有改到点上

最后发现问题: 就是 new TreeNode 是在整个绑定外部,在逐级绑定时,这个node没有被重新初始化,还是我刚刚添加上去的node。

错误示范:

 //加载子节点
protected void tree_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
DataTable dt = myGetDataTable();//从数据库中获取数据(需自定义)
if (dt != null && dt.Rows.Count > )
{
int depth = e.Node.Depth;
DataView dv = dt.DefaultView;
TreeNode node = new TreeNode();//就是这里错了 if (depth == )//
{
DataTable dtItem = dv.ToTable(true, "省");
string limit = string.Format("省 = '{0}'", txt_s.Text);
DataRow[] drs_pc = dtItem.Select(limit);
foreach (DataRow dr in drs_pc)
{
node.Text = dr["省"].ToString();
node.Value = dr["省"].ToString();
node.SelectAction = TreeNodeSelectAction.SelectExpand;
node.Expanded = true;
node.PopulateOnDemand = true;
node.ToggleExpandState();
e.Node.ChildNodes.Add(node);
}
}
else if (depth == )
{
DataTable dtItem = dv.ToTable(true, "省", "市");
string limit = string.Format("省 = '{0}' AND 市 = '{0}' ", txt_s.Text, txt_s2.Text);
DataRow[] drs_type = dtItem.Select(limit);
foreach (DataRow dr in drs_type)
{
node.Text = dr["市"].ToString();
node.Value = dr["市"].ToString();
node.SelectAction = TreeNodeSelectAction.SelectExpand;
node.Expanded = true;
node.PopulateOnDemand = true;
node.ToggleExpandState();
e.Node.ChildNodes.Add(node);
}
}
}
}

(这只是一个示例,主要想记住这个问题)

不仅是这一种情况会引起因共用变量而出现的问题,还有当new 一个类时,如果使用类的同一个属性或字段,在前面已经给这个属性或字段赋值,后面使用时未进行重新赋值,则这个属性或字段的值是前一次的值,而不是当前需要的值(未重新new 这个类的情况下)。

还有很多类似或出现bug的情况,以后需要注意。

C# 关于变量使用范围容易犯错的问题(TreeView数据绑定为例)的更多相关文章

  1. Linux用户态定时器用法以及犯错总结【转】

    转自:http://blog.csdn.net/csdn_logo/article/details/48525703 版权声明:本文为博主原创文章,欢迎转载,转载请注明出处,多谢合作. 采样的时候要用 ...

  2. 致DBA:为什么你经常犯错,是因为你做的功课不够

    专职做DBA已经6年多的事件了,看同行.同事犯了太多的错误,自己也犯了非常多的错误.一路走来,感触非常深.然而绝大多数的错误其实都是很低级的错误.有的是因为不了解某个引擎的特性导致:有的是因为对线上环 ...

  3. Makefileeasy犯错的语法

    1.引言 近期学习android的Build系统,接触最多的自然就是Makefile语法.发现非常多easy出错的地方,不避开这些错误语法没法真正了解Makefile的内涵.以下就介绍遇到的一些让人困 ...

  4. m_Orchestrate learning system---二十、如何写代码不容易犯错

    m_Orchestrate learning system---二十.如何写代码不容易犯错 一.总结 一句话总结:能排序多排序 这次查错的启示: 1.代码数据更规整:要是取出的数据排序的话可以减少很多 ...

  5. java面试题最容易犯错

    1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量.静态方法.静态类. 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不 ...

  6. vue router引入路由与路由配置容易犯错的地方与常见的报错与处理报错

    首先npm安装vue-router插件,就不说了其次: 先看下我本地的目录结构吧 第一步:在src目录下新建一个专门存放router的index.js文件里面的内容为: import Vue from ...

  7. 朱晔和你聊Spring系列S1E6:容易犯错的Spring AOP

    阅读PDF版本 标题有点标题党了,这里说的容易犯错不是Spring AOP的错,是指使用的时候容易犯错.本文会以一些例子来展开讨论AOP的使用以及使用过程中容易出错的点. 几句话说清楚AOP 有关必要 ...

  8. java中最容易犯错的特殊字符

    问题背景 能准确说出下面的java 执行完毕后会打印出什么? System.out.println( String.class.getName()+ ".class"); Syst ...

  9. mybatis基础犯错总结

    1.关于mybatis的文件一般都是其mapper文件出错: 首先关于输入参数parameterType出错: (1)基本数据类型:如果输入参数只有一个,其数据类型可以是基本数据类型,也可以是自己定的 ...

随机推荐

  1. idea开发maven项目热加载

    JavaWeb项目,尤其是一些大型项目,在开发过程中,启动项目耗费的时间就不短.大大的拖慢了开发速度!在这分享一种不需要插件就能实现热加载的方法! 默认已经创建好一个Maven项目 点击此按钮 点击 ...

  2. 使用kermit通过串口升级uboot

    在开发板的启动选项中看到如下两行: 7: Load Boot Loader code then write to Flash via Serial. 9: Load Boot Loader code ...

  3. jsp脚本的九个内置对象

    JSP脚本中包含9个内置对象, 这9个内置对象都是Servlet API 接口实例, 只是JSP规范对它们进行了默认初始化(由JSP 页面对应Servlet 的jspService()方法来创建这些实 ...

  4. struts2的文件配置以及注释代码

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...

  5. sprindmvc

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模 ...

  6. Maven中遇到Unsupported major.minor version 51.0错误

    将错误复制到某度上,查询出结果显示JDK版本不匹配. 我按着步骤执行结束后还是有以下错误: 配置: Tomcat: 最终解决: 我在Initialize的时候使用的版本是JDK1.8的,导致的这个错误 ...

  7. k-means缺陷

    k均值算法非常简单且使用广泛,但是存在的缺陷有: 1. K值需要预先给定: 属于预先知识,很多情况下K值的估计非常困难. 2. K-Means算法对初始选取的聚类中心点是敏感的: 不同的随机种子点得到 ...

  8. [Java concurrent][Collections]

    同步容器类 同步容器类包括Vector和Hashtable,二者是早期JDK的一部分.以及一些在JDK1.2中添加的可以由Collections.synchronizedXxx等工厂方法创建的. 这些 ...

  9. L342 Air Pollution Is Doing More Than Just Slowly Killing Us

    Air Pollution Is Doing More Than Just Slowly Killing Us In the future, the authorities might need to ...

  10. Angular4.0中常用指令

    Angular 4.0 1. 指令:*ngFor 循环带索引的两种方法: <tr *ngFor="let item of listWorkingDetails index as i&q ...