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. 将float数据类型转换为str

    示例程序: #include <stdio.h> . . void UART_send_byte(char dat); void UART_send_string(unsigned cha ...

  2. hibernate 保存的flush怎么用?

    hibernate 中的flush方法只有在上面的数据保存用了hibernate的方法保存了,但是在同一个事物当中需要用SQL的方法去查上面保存的数据,这个时候上方的hibernate保存后面就需要用 ...

  3. JS--------文件操作基本方法:上传/下载

    /** * 上传文件 * @param {any} files 文件 * @param {any} data 数据 * @returns [true,文件路径] * @returns [false,异 ...

  4. pytorch预训练

    Pytorch预训练模型以及修改 pytorch中自带几种常用的深度学习网络预训练模型,torchvision.models包中包含alexnet.densenet.inception.resnet. ...

  5. mysql无法安装,报 The older version of MySQL Installer - Community cannot be removed. Contact your technical support group

    解决办法: C:\Users\Administrator>msiexec /i C:\Users\Administrator\Downloads\mysql-installer-web-comm ...

  6. eclipse 项目中嵌入jetty

    Jetty是一个提供HHTP服务器.HTTP客户端和javax.servlet容器的开源项目,Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的 ...

  7. exp/expdp 与 imp/impdp命令导入导出数据库详解

    一.exp命令导出数据库 如何使exp的帮助以不同的字符集显示:set nls_lang=simplified chinese_china.zhs16gbk,通过设置环境变量,可以让exp的帮助以中文 ...

  8. LOJ 10002 喷水装置 未完

    #include<bits/stdc++.h> using namespace std; int T,n,l,w; ; struct S{ double s,t; }a[maxn]; bo ...

  9. 今日bug:error: invalid array assignment

    错误代码: struct STUD { int ID;//学号 ]; float score; }stud; STUD SS[]; student.open("student.dat&quo ...

  10. 一个http请求从用户输入网址开始到结束都发生了什么

    一个http请求从用户输入网址开始到结束都发生了什么   一.一个http请求从开始到Django后台,到结束发生了什么 通过用户输入的域名解析出IP地址 TCP/IP 三次握手 进入nginx--- ...