问题描述
需求:有三个listbox(framesize,Competence,Numberofpoles),分别把选中的值放入textbox里面,选择framesize的值显示在textbox里面,并且显示Competence里面的值,选择Competece的值在textbox里面的framesize的值后面累加,Numberofpoles也是一样在Competece的值后面累加。问题:为什么我选Competence的值后正常显示累加到textbox里面,但是去选Numberofpoles的时候会替换掉Competence的值,同时如果我在去选择Competence的值会替换掉Numberofpoles的值?代码:if(Page.IsPostBack){this.TextBox1.Text="";}publicstringtextBox_Text(stringtext,intcount,stringlistbox_text1){stringaa="";string[]arr_text=text.Split(newchar[]{','});if(arr_text.Length>0){for(inti=0;i<arr_text.Length;i++){if(i==count){arr_text[i]=listbox_text1;}aa+=","+arr_text[i];}}else{aa=text;}aa=aa.Substring(1);returnaa;}privatestaticstringlist_text="";protectedvoidframesize_SelectedIndexChanged(objectsender,EventArgse){count=0;stringsa=this.framesize.Text;string[]s=sa.Split(newchar[]{':'});foreach(varitemins){this.framesize.DataValueField=item;list_text=item;textbox=item;break;}//textbox=textbox.Substring(1,textbox.Length);this.TextBox1.Text=textBox_Text(textbox,count,list_text);if(this.framesize.SelectedItem.Selected){stringss=this.framesize.SelectedValue.ToString();string[]framesize=ss.Split(newchar[]{':'});foreach(variteminframesize){//this.framesize.DataTextField=item;strings1=item;strings2=item;this.Competence.DataSource=DAL.PARAMETERDAL.SelectCompetence1(s1);this.Competence.DataValueField="F1008_PARADESC";this.Competence.DataBind();this.RatedCurrent.DataValueField="F1008_PARADESC";//这里可以暂时不用管this.RatedCurrent.DataSource=DAL.PARAMETERDAL.SelectRatedCurrent(s2);this.RatedCurrent.DataBind();//this.Competence.Visible=true;break;}}staticstringtextbox="";protectedvoidCompetence_SelectedIndexChanged(objectsender,EventArgse){string[]listbox_value=textbox.Split(newchar[]{','});count=1;strings=textbox;if(this.Competence.SelectedItem.Selected){stringins=this.Competence.Text;string[]Competence=ins.Split(newchar[]{':'});foreach(variteminCompetence){this.Competence.DataValueField=item;s+=","+item;list_text=item;break;}this.TextBox1.Text=textBox_Text(s,count,list_text);this.Numberofpoles.Visible=true;this.Numberofpoles.DataSource=DAL.PARAMETERDAL.SelectNumberofpoles();this.Numberofpoles.DataValueField="F1008_PARADESC";this.Numberofpoles.DataBind();}}protectedvoidNumberofpoles_SelectedIndexChanged(objectsender,EventArgse){count=2;string[]listbox_value=textbox.Split(newchar[]{','});strings1=textbox;if(this.Numberofpoles.SelectedItem.Selected){stringins=this.Numberofpoles.Text;string[]Numberofpoles=ins.Split(newchar[]{':'});foreach(variteminNumberofpoles){this.Numberofpoles.DataValueField=item;s1+=","+item;list_text=item;this.RatedCurrent.Visible=true;break;}this.TextBox1.Text=textBox_Text(s1,count,list_text);}}
解决方案
本帖最后由 chasel_yy 于 2014-08-01 08:58:52 编辑
解决方案二:
if(Page.IsPostBack){this.TextBox1.Text="";}你不是一刷新就把文本框清空了么,当然会替换掉了
解决方案三:
引用1楼Z65443344的回复:
if(Page.IsPostBack){this.TextBox1.Text="";}你不是一刷新就把文本框清空了么,当然会替换掉了
那我应该怎么写?
解决方案四:
if(Page.IsPostBack){this.TextBox1.Text="";}this.TextBox1.Text="";去掉就行了
解决方案五:
if(!IsPostBack){this.TextBox1.Text="";}
解决方案六:
我不知道你这代码是从哪扒下来的,也不知道是根据什么敲上去的.但是我知道,你要想实现功能,首先得研究明白你写的代码每一句到底起什么作用,而你又要实现什么逻辑我不知道你清空文本框是出于什么目的,所以也没法替你改,只能你自己去想.
解决方案七:
引用4楼wangnaisheng的回复:
if(!IsPostBack){this.TextBox1.Text="";}
我做出来了,但是不能替换--。只能累加
解决方案八:
引用5楼Z65443344的回复:
我不知道你这代码是从哪扒下来的,也不知道是根据什么敲上去的.但是我知道,你要想实现功能,首先得研究明白你写的代码每一句到底起什么作用,而你又要实现什么逻辑我不知道你清空文本框是出于什么目的,所以也没法替你改,只能你自己去想.
清空文本框是因为首次加载的时候把他清空掉,其次,我需要把值保存在静态变量里面,然后第二次用的时候取出来。
解决方案九:
不要老想着先实现功能,后慢慢学习.你不通过实现的过程来积累,等程序做好了,你就更没法没事改着玩了.以这样的心态来做事情,永远只会复制粘贴改改,没有自己的东西.
解决方案十:
引用7楼chasel_yy的回复:
Quote: 引用5楼Z65443344的回复:
我不知道你这代码是从哪扒下来的,也不知道是根据什么敲上去的.但是我知道,你要想实现功能,首先得研究明白你写的代码每一句到底起什么作用,而你又要实现什么逻辑我不知道你清空文本框是出于什么目的,所以也没法替你改,只能你自己去想.清空文本框是因为首次加载的时候把他清空掉,其次,我需要把值保存在静态变量里面,然后第二次用的时候取出来。
你要知道,你做的是个网站,会有很多人用你用静态变量,所有人看到的东西就都一样了.你需要把内容放到session里去做程序不要怕麻烦,也不要动不动就十万火急,你得静下心来,先想明白,后动手
解决方案十一:
我的一个同事,在写一段程序的时候,遇到代码一样的地方,就复制过来我让他放到函数里,他说,怪麻烦的,我就用一次,复制一下简单结果到最后他不只复制了一次,而是几十个地方都是复制的后来发现代码里有BUG,需要改,几十个地方都要改.
解决方案十二:
引用楼主chasel_yy的回复:
需求:有三个listbox(framesize,Competence,Numberofpoles),分别把选中的值放入textbox里面,选择framesize的值显示在textbox里面,并且显示Competence里面的值,选择Competece的值在textbox里面的framesize的值后面累加,Numberofpoles也是一样在Competece的值后面累加。问题:为什么我选Competence的值后正常显示累加到textbox里面,但是去选Numberofpoles的时候会替换掉Competence的值,同时如果我在去选择Competence的值会替换掉Numberofpoles的值?代码:if(Page.IsPostBack){this.TextBox1.Text="";}publicstringtextBox_Text(stringtext,intcount,stringlistbox_text1){stringaa="";string[]arr_text=text.Split(newchar[]{','});if(arr_text.Length>0){for(inti=0;i<arr_text.Length;i++){if(i==count){arr_text[i]=listbox_text1;}aa+=","+arr_text[i];}}else{aa=text;}aa=aa.Substring(1);returnaa;}privatestaticstringlist_text="";protectedvoidframesize_SelectedIndexChanged(objectsender,EventArgse){count=0;stringsa=this.framesize.Text;string[]s=sa.Split(newchar[]{':'});foreach(varitemins){this.framesize.DataValueField=item;list_text=item;textbox=item;break;}//textbox=textbox.Substring(1,textbox.Length);this.TextBox1.Text=textBox_Text(textbox,count,list_text);if(this.framesize.SelectedItem.Selected){stringss=this.framesize.SelectedValue.ToString();string[]framesize=ss.Split(newchar[]{':'});foreach(variteminframesize){//this.framesize.DataTextField=item;strings1=item;strings2=item;this.Competence.DataSource=DAL.PARAMETERDAL.SelectCompetence1(s1);this.Competence.DataValueField="F1008_PARADESC";this.Competence.DataBind();this.RatedCurrent.DataValueField="F1008_PARADESC";//这里可以暂时不用管this.RatedCurrent.DataSource=DAL.PARAMETERDAL.SelectRatedCurrent(s2);this.RatedCurrent.DataBind();//this.Competence.Visible=true;break;}}staticstringtextbox="";protectedvoidCompetence_SelectedIndexChanged(objectsender,EventArgse){string[]listbox_value=textbox.Split(newchar[]{','});count=1;strings=textbox;if(this.Competence.SelectedItem.Selected){stringins=this.Competence.Text;string[]Competence=ins.Split(newchar[]{':'});foreach(variteminCompetence){this.Competence.DataValueField=item;s+=","+item;list_text=item;break;}this.TextBox1.Text=textBox_Text(s,count,list_text);this.Numberofpoles.Visible=true;this.Numberofpoles.DataSource=DAL.PARAMETERDAL.SelectNumberofpoles();this.Numberofpoles.DataValueField="F1008_PARADESC";this.Numberofpoles.DataBind();}}protectedvoidNumberofpoles_SelectedIndexChanged(objectsender,EventArgse){count=2;string[]listbox_value=textbox.Split(newchar[]{','});strings1=textbox;if(this.Numberofpoles.SelectedItem.Selected){stringins=this.Numberofpoles.Text;string[]Numberofpoles=ins.Split(newchar[]{':'});foreach(variteminNumberofpoles){this.Numberofpoles.DataValueField=item;s1+=","+item;list_text=item;this.RatedCurrent.Visible=true;break;}this.TextBox1.Text=textBox_Text(s1,count,list_text);}}
==。我可以说我的不用session保存值吗?我的是在同一个页面,我只不过是暂时保存值而已。你没搞懂我的意思好吗
解决方案十三:
解决方案十四:
引用11楼chasel_yy的回复:
==。我可以说我的不用session保存值吗?我的是在同一个页面,我只不过是暂时保存值而已。你没搞懂我的意思好吗
你的不是web程序?web程序只能一个用户访问?跟几个页面,是否同一个页面有任何关系?跟暂时保存,还是永久保存,有任何关系?你网站发布后,没法限制不同用户不要同时去访问你这个"暂时"的页面,只要他们同时访问了,那么一个人点了什么,另一个人也能看见.
解决方案十五:
楼主我先吐槽你用静态变量这种方法。网页上按理来说是不应该使用静态变量的。静态变量属于全局变量,一个是不安全,所有用户都会访问这个变量,如果两个用户同时在操作这个,你就会发现这两个用户之间会互相影响。另一个是不方便管理,这么一个东西常驻内存,毕竟不是一件好事。所以单用户的数据最好放在SESSION,多用户的只读数据最好放cache,多用户的可写数据……这个不建议有。然后再来说说正文,你这个问题,代码乱七八糟,好歹我是看明白了。至少我看到问题出在这里。如果我没看错,你这个最终的功能应该是这样的模式,显示AAA,BBB,CCC,三个lisbox分别对应选择ABC三个。但是你在三个事件中都使用textbox这个静态变量来获取欲处理的字符串。问题在于,你只有在framesize_SelectedIndexChanged事件中给予了textbox赋值。其他两段时间代码中,textbox一直处于等号右边。所以在你其他两段事件处理时,textbox一直保持着你从framesize_SelectedIndexChanged所选出的值。但我不知道你初始值到底是什么,但从唯一给textBox赋值的下面这段代码来看,这个明显不会是AAA,BBB,CCC这种格式。foreach(varitemins){this.framesize.DataValueField=item;list_text=item;textbox=item;break;}所以具体我无从得知到底是哪里出了问题,建议你合理利用断点进行调试。监视textbox变量的值,看看它再哪儿变的不正常。
解决方案:
引用14楼zhaojiaji的回复:
楼主我先吐槽你用静态变量这种方法。网页上按理来说是不应该使用静态变量的。静态变量属于全局变量,一个是不安全,所有用户都会访问这个变量,如果两个用户同时在操作这个,你就会发现这两个用户之间会互相影响。另一个是不方便管理,这么一个东西常驻内存,毕竟不是一件好事。所以单用户的数据最好放在SESSION,多用户的只读数据最好放cache,多用户的可写数据……这个不建议有。然后再来说说正文,你这个问题,代码乱七八糟,好歹我是看明白了。至少我看到问题出在这里。如果我没看错,你这个最终的功能应该是这样的模式,显示AAA,BBB,CCC,三个lisbox分别对应选择ABC三个。但是你在三个事件中都使用textbox这个静态变量来获取欲处理的字符串。问题在于,你只有在framesize_SelectedIndexChanged事件中给予了textbox赋值。其他两段时间代码中,textbox一直处于等号右边。所以在你其他两段事件处理时,textbox一直保持着你从framesize_SelectedIndexChanged所选出的值。但我不知道你初始值到底是什么,但从唯一给textBox赋值的下面这段代码来看,这个明显不会是AAA,BBB,CCC这种格式。foreach(varitemins){this.framesize.DataValueField=item;list_text=item;textbox=item;break;}所以具体我无从得知到底是哪里出了问题,建议你合理利用断点进行调试。监视textbox变量的值,看看它再哪儿变的不正常。
错误我自己找出来了,只是没有在tebox_text方法里面只是没有返回textbox而已。session真的暂时用不到,这个网址只是给少量人用,并不是任何人都可以进去的。谢谢你的担心。
解决方案:
引用13楼Z65443344的回复:
Quote: 引用11楼chasel_yy的回复:
==。我可以说我的不用session保存值吗?我的是在同一个页面,我只不过是暂时保存值而已。你没搞懂我的意思好吗你的不是web程序?web程序只能一个用户访问?跟几个页面,是否同一个页面有任何关系?跟暂时保存,还是永久保存,有任何关系?你网站发布后,没法限制不同用户不要同时去访问你这个"暂时"的页面,只要他们同时访问了,那么一个人点了什么,另一个人也能看见.
[img=http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/7.gif][/img]这个没多大关系。只是看下参数而已,不会做任何的操作
解决方案:
引用5楼Z65443344的回复:
我不知道你这代码是从哪扒下来的,也不知道是根据什么敲上去的.但是我知道,你要想实现功能,首先得研究明白你写的代码每一句到底起什么作用,而你又要实现什么逻辑我不知道你清空文本框是出于什么目的,所以也没法替你改,只能你自己去想.
难道必须用临时会话状态吗
解决方案:
引用15楼chasel_yy的回复:
错误我自己找出来了,只是没有在tebox_text方法里面只是没有返回textbox而已。session真的暂时用不到,这个网址只是给少量人用,并不是任何人都可以进去的。谢谢你的担心。
你这就是不负责任的心态.哪怕目前只是给一个人用,你就用了静态变量那么假如3年以后,用户要求给10个人用,还要把你叫回来重新改代码,重新发布?
解决方案:
引用18楼Z65443344的回复:
Quote: 引用15楼chasel_yy的回复:
错误我自己找出来了,只是没有在tebox_text方法里面只是没有返回textbox而已。session真的暂时用不到,这个网址只是给少量人用,并不是任何人都可以进去的。谢谢你的担心。你这就是不负责任的心态.哪怕目前只是给一个人用,你就用了静态变量那么假如3年以后,用户要求给10个人用,还要把你叫回来重新改代码,重新发布?
哦。受教了
解决方案:
基本的权限分配你应该有所了解吧?用户应该可以自己新增用户,并给用户分配相应权限,哪些人可以使用哪些功能如果用户给很多人分配了这个功能,那就会是个大BUG.而如果用户连分配权限也做不到,那你以后就不用编代码了,就专业给用户做后期维护就好了,一有人员变动,就要把你找回来改代码.
解决方案:
引用20楼Z65443344的回复:
基本的权限分配你应该有所了解吧?用户应该可以自己新增用户,并给用户分配相应权限,哪些人可以使用哪些功能如果用户给很多人分配了这个功能,那就会是个大BUG.而如果用户连分配权限也做不到,那你以后就不用编代码了,就专业给用户做后期维护就好了,一有人员变动,就要把你找回来改代码.
这个网址不提供注册。但是还是会有权限的
解决方案:
引用21楼chasel_yy的回复:
Quote: 引用20楼Z65443344的回复:
基本的权限分配你应该有所了解吧?用户应该可以自己新增用户,并给用户分配相应权限,哪些人可以使用哪些功能如果用户给很多人分配了这个功能,那就会是个大BUG.而如果用户连分配权限也做不到,那你以后就不用编代码了,就专业给用户做后期维护就好了,一有人员变动,就要把你找回来改代码.这个网址不提供注册。但是还是会有权限的
楼主你还是没明白公共静态变量的坏处。就和我上面说的,通常网页上不要有可以公共写入的变量,这是因为这种变量是所有用户公用的,也就是有权限登陆这个网页的所有人都有写入的权限,后写入的人可能会覆盖掉前一个人的数据。而且公共的写入变量时,多用户使用时可能会导致写入冲突。当然,你要是属于作业或者临时凑合用的网页,这么用也没啥。应付差事的东西写大段缓存和SESSION读写毕竟消费比太低。但是正式使用的软件还是别这样了。此外,你这个例子里其实完全不需要这个静态变量的,直接用POSTBACK的TEXTBOX.TEXT就可以了啊。
解决方案:
这个不是很懂···帮顶····
解决方案:
引用22楼zhaojiaji的回复:
Quote: 引用21楼chasel_yy的回复:
Quote: 引用20楼Z65443344的回复:
基本的权限分配你应该有所了解吧?用户应该可以自己新增用户,并给用户分配相应权限,哪些人可以使用哪些功能如果用户给很多人分配了这个功能,那就会是个大BUG.而如果用户连分配权限也做不到,那你以后就不用编代码了,就专业给用户做后期维护就好了,一有人员变动,就要把你找回来改代码.这个网址不提供注册。但是还是会有权限的
楼主你还是没明白公共静态变量的坏处。就和我上面说的,通常网页上不要有可以公共写入的变量,这是因为这种变量是所有用户公用的,也就是有权限登陆这个网页的所有人都有写入的权限,后写入的人可能会覆盖掉前一个人的数据。而且公共的写入变量时,多用户使用时可能会导致写入冲突。当然,你要是属于作业或者临时凑合用的网页,这么用也没啥。应付差事的东西写大段缓存和SESSION读写毕竟消费比太低。但是正式使用的软件还是别这样了。此外,你这个例子里其实完全不需要这个静态变量的,直接用POSTBACK的TEXTBOX.TEXT就可以了啊。
恩,谢谢
解决方案:
引用9楼Z65443344的回复:
Quote: 引用7楼chasel_yy的回复:
Quote: 引用5楼Z65443344的回复:
我不知道你这代码是从哪扒下来的,也不知道是根据什么敲上去的.但是我知道,你要想实现功能,首先得研究明白你写的代码每一句到底起什么作用,而你又要实现什么逻辑我不知道你清空文本框是出于什么目的,所以也没法替你改,只能你自己去想.清空文本框是因为首次加载的时候把他清空掉,其次,我需要把值保存在静态变量里面,然后第二次用的时候取出来。
你要知道,你做的是个网站,会有很多人用你用静态变量,所有人看到的东西就都一样了.你需要把内容放到session里去做程序不要怕麻烦,也不要动不动就十万火急,你得静下心来,先想明白,后动手
请教下,以上代码应该如何写到session里面去。
解决方案:
session["a"]="1";就行了取出的时候先判断if(session["a"]!=null)str=session["a"].tostring();
解决方案:
引用26楼Z65443344的回复:
session["a"]="1";就行了取出的时候先判断if(session["a"]!=null)str=session["a"].tostring();
恩,我是这么做的,差不多做完了,代码也改了,编码格式也改了--。
解决方案:
我是来学习的~!~~~~~