C# 关于变量使用范围容易犯错的问题(TreeView数据绑定为例)
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数据绑定为例)的更多相关文章
- Linux用户态定时器用法以及犯错总结【转】
转自:http://blog.csdn.net/csdn_logo/article/details/48525703 版权声明:本文为博主原创文章,欢迎转载,转载请注明出处,多谢合作. 采样的时候要用 ...
- 致DBA:为什么你经常犯错,是因为你做的功课不够
专职做DBA已经6年多的事件了,看同行.同事犯了太多的错误,自己也犯了非常多的错误.一路走来,感触非常深.然而绝大多数的错误其实都是很低级的错误.有的是因为不了解某个引擎的特性导致:有的是因为对线上环 ...
- Makefileeasy犯错的语法
1.引言 近期学习android的Build系统,接触最多的自然就是Makefile语法.发现非常多easy出错的地方,不避开这些错误语法没法真正了解Makefile的内涵.以下就介绍遇到的一些让人困 ...
- m_Orchestrate learning system---二十、如何写代码不容易犯错
m_Orchestrate learning system---二十.如何写代码不容易犯错 一.总结 一句话总结:能排序多排序 这次查错的启示: 1.代码数据更规整:要是取出的数据排序的话可以减少很多 ...
- java面试题最容易犯错
1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量.静态方法.静态类. 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不 ...
- vue router引入路由与路由配置容易犯错的地方与常见的报错与处理报错
首先npm安装vue-router插件,就不说了其次: 先看下我本地的目录结构吧 第一步:在src目录下新建一个专门存放router的index.js文件里面的内容为: import Vue from ...
- 朱晔和你聊Spring系列S1E6:容易犯错的Spring AOP
阅读PDF版本 标题有点标题党了,这里说的容易犯错不是Spring AOP的错,是指使用的时候容易犯错.本文会以一些例子来展开讨论AOP的使用以及使用过程中容易出错的点. 几句话说清楚AOP 有关必要 ...
- java中最容易犯错的特殊字符
问题背景 能准确说出下面的java 执行完毕后会打印出什么? System.out.println( String.class.getName()+ ".class"); Syst ...
- mybatis基础犯错总结
1.关于mybatis的文件一般都是其mapper文件出错: 首先关于输入参数parameterType出错: (1)基本数据类型:如果输入参数只有一个,其数据类型可以是基本数据类型,也可以是自己定的 ...
随机推荐
- java 反射获取方法返回值类型
//ProceedingJoinPoint pjp //获取方法返回值类型 Object[] args = pjp.getArgs(); Class<?>[] paramsCls = ne ...
- 004dayPython学习输入并输出用户名和密码
在python 2.7中,捕获用户输入用raw_input 一.捕获并打印用户名和密码 要求: 输入用户名和密码都可见 # -*- coding:utf-8 -*-userName = raw_inp ...
- LeakCanary 来检查 Android 内存泄漏
LeakCanary 来检查 Android 内存泄漏
- vue项目使用前端框架开发,实现滑动效果,若不刷新页面则无法达到预期效果的问题及解决方法
滑动等效果的初始化时机很重要,在vue项目开发中,需到mounted()钩子函数 (当组件中的DOM结构被渲染好并放到页面中后,会执行这个钩子函数,此时即可初始化滑动效果的js代码). 若组件未挂载到 ...
- NLog使用整理
NLog使用中碰到的问题整理 1,日志写mysql数据库报错, 原因: 在sql语句中使用了mysql的函数now() 导致插入失败, 解决办法: 使用参数代替now(). 在nlog配置文件中设置 ...
- git远端密码修改
控制面板--凭据管理器--windows凭据--修改git密码
- Adversarial Examples for Semantic Segmentation and Object Detection 阅读笔记
Adversarial Examples for Semantic Segmentation and Object Detection (语义分割和目标检测中的对抗样本) 作者:Cihang Xie, ...
- 学号 20175223 《Java程序设计》第9周学习总结
目录 教材学习内容总结 教材学习中的问题和解决过程 1. 输出文件时过多输出. 代码调试中的问题和解决过程 1. 问题:费马素性检验程序. [代码托管] 学习进度条 参考资料 目录 教材学习内容总结 ...
- python之django母板页面
其实就是利用{% block xxx %} {% endblock %}的方式定义一个块,相当于占位.存放在某个html中,比如base.html 然后在需要实现这些块的文件中,使用继承{% ex ...
- bottle.py中的路由搜索优化
# Now search regexp routes # ROUTES_REGEXP是一个字典,键是请求方法,值是[路由, 处理函数]的列表 # 例如:{"GET", [[路由1, ...