目的:当datagrid中的模版列中的textbox的值有了变动(当然,可以是焦点失去)的时候,我需要用Javascript在客户端上做一小个运算,把所有模版列中的值加起来,然后把计算值显示出来。
请教各位大虾,我应该怎么写啊!

解决方案 »

  1.   

    加了20分了,还是每人指教么?~I need help~
      

  2.   

    后台:textbox.attributes.add("这里填个你需要的客户端事件名称", "cal");
    前台:
    function cal()
    {
    //遍历datagrid每一行,datagrid在客户端是个table.
    }
      

  3.   

    我菜鸟,请详细指教下:循环遍历每一行~~~~~table的~~~~~~~~
    行行好,能详细讲解一下吗?能稍微麻烦的话,就请帮助写一下这个cal的函数,JavaScript小弟非常的不熟息~
      

  4.   

    假设你的textbox所在模板列是第一列, textbox是模板列里的第一个控件. 
       function checkJockeyID()
        {
             //Get ID in Page of the DataGrid
             var strGridID = '<%=this.Grid.ClientID%>';
             var objGrid = document.getElementById(strGridID);
             var iRowCount = objGrid.rows.length;
             var total ;
             for(var i = 1;i<iRowCount;i++)
             {
                var txt = objGrid.rows(i).cells(0).children(0);
                total = total + parseInt(txt.value);
             }
             显示的控件.某个属性 = total;
        }
      

  5.   

    //编译错处,出错提示为:
    编译器错误信息: BC30451: 名称“this”未声明。源错误:
    行 14:     {
    行 15:          //Get ID in Page of the DataGrid
    行 16:          var strGridID = '<%=this.Grid.ClientID%>';
    行 17:          var objGrid = document.getElementById(strGridID);
    行 18:          var iRowCount = objGrid.rows.length;//我在代码中是这样写的
      Dim txtCB As TextBox
      txtCB = e.Item.FindControl("textbox1")
      txtCB.Attributes.Add("onChange", "checkJockeyID()")
    我写在datagrid的itemDataBind中请再帮我看看,为什么会出错哦
      

  6.   

    var strGridID = '<%=this.Grid.ClientID%>'; 这里的Grid等于你为datagrid指定的id属性.
      

  7.   

    请看一下,是这样写吗?
    var strGridID = '<%=this.datagrid1.ClientID%>';
    是不是这样,
    但是还是编译出错,仍然这样:
    //编译错处,出错提示为:
    编译器错误信息: BC30451: 名称“this”未声明。还有其他需要注意的地方吗?是不是我其他地方弄错了
    ~
      

  8.   

    是我弄错了,没注意你是 vb, vb对应的关键字是Me.
    用<%=Me.datagrid1.ClientID%>试试
      

  9.   

    后台调用代码:
    If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
                Dim txtCB As TextBox
                txtCB = e.Item.FindControl("TextBox2")
    txtCB.Attributes.Add("onChange", "checkJockeyID()")
    End If
    前台函数:
    <script language="javascript">
    <!--
     function checkJockeyID()
        {
             //Get ID in Page of the DataGrid
             var strGridID = '<%=me.DataGrid1.ClientID%>';
             var objGrid = document.getElementById(strGridID);
             var iRowCount = objGrid.rows.length;
             var total ;
             for(var i = 1;i<iRowCount;i++)
             {
                var txt = objGrid.rows(i).cells(0).children(0);
                total = total + parseInt(txt.value);
             }
             Label2.text = total;
        }//-->
    </script>
    --------------------------------------------
    当我改变了datagrid中textbox2的值的时候,没有什么改变,
    高手,请再指教一下,哪里出了问题
      

  10.   

    得到了一些NaN的值,~~~~~~~~~~~
    ?
      

  11.   

    前台:
    <body class="homeBody">
        <form id="form1" runat="server" method="get">
            <div>
               <asp:DataGrid ID="DataGrid1" runat="server" OnItemDataBound="DataGrid1_ItemDataBound" AutoGenerateColumns="false">
               <Columns>
                 <asp:TemplateColumn HeaderText="">
                 <ItemTemplate>
                     <asp:TextBox ID="TextBox1" runat="server" Text='<%#Container.DataItem  %>'></asp:TextBox>
                 </ItemTemplate>
                 </asp:TemplateColumn>
               </Columns>
               </asp:DataGrid>
            </div>
            <span id="result"></span>
        </form>
    </body>
    <script type="text/javascript" language="javascript">
    function cal()
    {
       var strGridID = '<%=this.DataGrid1.ClientID%>';
       var objGrid = document.getElementById(strGridID);
       var iRowCount = objGrid.rows.length;
       var total = 0;
       for(var i = 1;i<iRowCount;i++)
       {
          var txt = objGrid.rows(i).cells(0).children(0);      total = total + parseInt(txt.value);
       }
       result.innerText = "Total:" + total.toString();
    }
    </script>后台:
            protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
            {
                if (e.Item.ItemIndex > -1)
                {
                    TextBox txt = (TextBox)e.Item.FindControl("TextBox1");
                    txt.Attributes.Add("onblur", "cal();");
                }
            }        protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    int[] ds = new int[] { 1, 2, 3, 4, 5 };
                    DataGrid1.DataSource = ds;
                    DataGrid1.DataBind();
                }
            }c#的, 已测试. 你对照着看一下, 根据你的需求改成vb.net的.
      

  12.   

    能不能问下scow(怡红快绿)兄是主要干什么的啊,这么厉害,我刚才去查了下document.getElementById(strGridID);  这些语句的用法,
    好像都是JacaScript的高级部分的东西~崇拜中