自定义web控件中有四个dropdownlist,请问当自定义控件中的其中任何一个dropdownlist的值发生改变的时候,在页面中的如何立即取得该值并与另一个同样的自定义控件中的dropdownlist选中的值相加,并在gridview同一行的一个label中显示出来?请大家赐教,不胜感激!

解决方案 »

  1.   

    处理 selectedindexchanged事件呗。我不知道你的所谓自定义控件中的四个dropdownlist是如何加载/绑定数据的。先不管它们“联动操作”的问题。首先,假设你再测试页面上放一个Button,然后你可以测试运行,在使用这个页面时,随机时间点击一下这个Button,调试跟踪时你的dropdownlist的数据源被重新读取了吗?如果重新读取了、dropdownlist被重新用数据创建了,那么就不用往下去做什么复杂的asp.net编程了,先解决基本的asp.net编程概念,才能保证以后比较准确简洁地设计asp.net程序。很显然,假设这个过程中数据库改变了,那么dropdownlist的状态就乱了。因为当这个测试button按下而造成回发时,在asp.net页面生命周期中你的自定义控件中任意一个dropdownlist都应该是自动恢复上一次输出html时的架构(既控件ID),这样asp.net就能够给它回填ViewState信息、客户端提交信息、准备触发之后的各种事件等。如果对应的架构ID没有找到,那么asp.net就会忽略它,你就会看到什么也没有完成。如果相同ID或者相同位置有其它类型的控件,那么asp.net程序就会垮掉、抛出一个异常报告类似“控件树上相同位置的控件类型错误”之类的异常信息。此时,显然不能读取后台数据库去重新绑定dropdownlist,那反而会搞乱控件。而且那反而会让你的程序的性能低下100倍。如果你调试时测试到确实是在点击这个button测试按钮的情况下并没有读取最初给dropdownlist绑定的数据源,而是dropdownlist自己恢复了状态架构,那么请贴出你是如何动态加载这4个dropdownlist的。实际上,你在page_load中加载它们时同时注册处理selectedindexchanged事件,并且在事件处理方法中去写:执行那个“值相加并且显示到label上”的两行代码就可以了。
      

  2.   

    如果在这个button测试下,发现根本不是正常的动态控件加载操作,也就是说你竟然在回发时再次读取数据源数据而重新绑定了各个dropdownlist,那么不要再考虑其他任何多余的功能(例如求和之类的),一定要先解决这个基本asp.net程序设计概念问题!
      

  3.   

    这个自定义控件是放在gridview的TemplateField中的,一共放了四个这样的自定义控件。
    每个自定义控件里面有4个dropdownlist,里面的值是写死的,现在想要达到的目的是:当控件里面的值发生改变的时候,griview上同一行有个分值能自动相加dropdownlist里选取的值。