当前位置:编程学习 > C#/ASP.NET >>

如何实现gridview模板自定义控件汇总计算

请教高手们一个问题:

想要在编辑下拉框的同时,将当前行的总分计算出来~
每一个栏目里面是用的用户自定义控件:

每栏“优良中差”只能选一个分值,且已经在用户自定义控件中实现了,每次选择,都将分值放在了hiddenfield里面了。(使用了javascript,写在了webcontrol1.ascx中)代码如下:
<script type="text/javascript">
    document.getElementById("<%=DropDownList1.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList1.ClientID %>").value;
        document.getElementById("<%=DropDownList2.ClientID %>").value = "";
        document.getElementById("<%=DropDownList3.ClientID %>").value = "";
        document.getElementById("<%=DropDownList4.ClientID %>").value = "";
    };
    document.getElementById("<%=DropDownList2.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList2.ClientID %>").value;
        document.getElementById("<%=DropDownList1.ClientID %>").value = "";
        document.getElementById("<%=DropDownList3.ClientID %>").value = "";
        document.getElementById("<%=DropDownList4.ClientID %>").value = "";
    };
    document.getElementById("<%=DropDownList3.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList3.ClientID %>").value;
        document.getElementById("<%=DropDownList1.ClientID %>").value = "";
        document.getElementById("<%=DropDownList2.ClientID %>").value = "";
        document.getElementById("<%=DropDownList4.ClientID %>").value = "";
    };
    document.getElementById("<%=DropDownList4.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList4.ClientID %>").value;
        document.getElementById("<%=DropDownList1.ClientID %>").value = "";
        document.getElementById("<%=DropDownList2.ClientID %>").value = "";
        document.getElementById("<%=DropDownList3.ClientID %>").value = "";
    };
</script>

此问题困挠我好久 , 实时计算总分,始终无法实现。 目前仅能实现通过点击按钮,后台C#计算出总分~
期待高手们的帮助,不胜感激! --------------------编程问答-------------------- 给每个下拉框都加一个onchange事件,判断这个User的4个隐藏域是否都有值,如果都值就计算总分。4个隐藏域的ID可以用字符串加UsersID命名,这样找起来方便 --------------------编程问答--------------------  具体如何实现呢?能否提供详细的代码呢?另外,这四个优良中差的下拉框是一个自定义控件实现的,如何呼叫其它自定义控件里的hiddenfield呢? --------------------编程问答-------------------- 用findcontrol根据控件ID可以找到控件的。
我觉得不需要自定义控件,用模板就可以了。 --------------------编程问答-------------------- 你这个需要DOM关系来获取,因为放在ascx里面的id会变,通过id来弄比较麻烦,通过DOM关系就简单了

你的控件是放在表格里面的吧,只要获取控件所在tr就行了,具体看代码

    //每次select onchange都需要调用此方法执行计算,这个函数可以放在aspx页面,不需要放在ascx控件中,当然放ascx中也行,只是会多次定义
    //tr:控件所在行
    function Compute(tr) {
        var inputs = tr.getElementsByTagName('input');
        if (inputs[0].value != '') num += parseInt(inputs[0].value, 10);
        if (inputs[1].value != '') num += parseInt(inputs[1].value, 10);
        if (inputs[2].value != '') num += parseInt(inputs[2].value, 10);
        if (inputs[3].value != '') num += parseInt(inputs[3].value, 10);

        tr.cells[4].innerHTML = num;
    }

    document.getElementById("<%=DropDownList1.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList1.ClientID %>").value;
        document.getElementById("<%=DropDownList2.ClientID %>").value = "";
        document.getElementById("<%=DropDownList3.ClientID %>").value = "";
        document.getElementById("<%=DropDownList4.ClientID %>").value = "";
        //注意tr的获取,得看最后生成的html结构,this对象为当前的select,有多少级父节点就需要多增加多少个parentNode直到得到当前行的TR对象
        Compute(this.parentNode.parentNode)

    };
    document.getElementById("<%=DropDownList2.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList2.ClientID %>").value;
        document.getElementById("<%=DropDownList1.ClientID %>").value = "";
        document.getElementById("<%=DropDownList3.ClientID %>").value = "";
        document.getElementById("<%=DropDownList4.ClientID %>").value = "";
        Compute(this.parentNode)/////////////////
    };
    document.getElementById("<%=DropDownList3.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList3.ClientID %>").value;
        document.getElementById("<%=DropDownList1.ClientID %>").value = "";
        document.getElementById("<%=DropDownList2.ClientID %>").value = "";
        document.getElementById("<%=DropDownList4.ClientID %>").value = "";
        Compute(this.parentNode)///////////////
    };
    document.getElementById("<%=DropDownList4.ClientID %>").onchange = function () {
        document.getElementById("<%=HiddenField1.ClientID %>").value = document.getElementById("<%=DropDownList4.ClientID %>").value;
        document.getElementById("<%=DropDownList1.ClientID %>").value = "";
        document.getElementById("<%=DropDownList2.ClientID %>").value = "";
        document.getElementById("<%=DropDownList3.ClientID %>").value = "";
        Compute(this.parentNode)/////////////
    };
--------------------编程问答-------------------- 为什么不用模板?为什么要用自定义的控件呢?
ASP.NET不是有个DROPDOUWLIST控件可以用吗?这样就不用HIDDENFIELD,直接把VALUE转换一下就行了。
先写一个方法计算分数;然后为你的下拉列表添加事件代码,代码引用你计算分数的方法就行了。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,