情况:
一个DataGrid中有三个模板列,在这些模板列的ItemTemplate中,直接放TextBox,在某一个DataGridItem中,当其中一个TextBox的值发生变化时,该DataGridItem中的另外一个TextBox的值要相应的发生变化.要求:
用JavaScript脚本语言在客户端实现.我的想法:
假如DataGrid的名字为Test_Grid,三个模板列中的TextBox的名字分别为TextBox1,TextBox2,TextBox3.
那么当该页面呈现在客户端的时候,它的Html文件会把那三个TextBox控件按一个规律命名.规律如下:第一行中的那三个控件名分别为:Test_Grid_ctrl2_TextBox1, Test_Grid_ctrl2_TextBox2, Test_Grid_ctrl2_TextBox3.那么我就这样想了,写一个Count(obj)自动计算的函数,在实际调用的时候,我就传一个"this"参数给它.如果能够通过这个Count函数中的obj来定位找出相应的TextBox控件,那么就可以用一般的方法来实现这个自动计算的脚本了.但是,我现在定位不出这些相应的控件,所以目前为止我还不知道该怎么样实现这个功能.路过的大哥,大姐,帮个忙啊.(可能我描述的不是很清楚.大家见谅!)

解决方案 »

  1.   

    定位可以用
    TextBox txtbTest=new TextBox();
    txtbTest=(TextBox )Test_Grid.Items[i].Cells[j].FindControl("TextBoxID");
    计算就不知道你要怎么计算了
      

  2.   

    here is an example:<script language="C#" runat='server'>
    void Page_Load(Object sender, EventArgs e)
    {
     if (!IsPostBack)
     {
      string[] s = {"a","b","c"};
      Test_Grid.DataSource= s;
      Test_Grid.DataBind();
     }
    }
    </script>
    <form runat="server">
    <asp:DataGrid id="Test_Grid" runat="server" AutoGenerateColumns="false"
    onkeyup="DoCalc()"
    >
     <Columns>
       <asp:TemplateColumn HeaderText="1">
    <ItemTemplate>
    <asp:TextBox id="TextBox1" runat="server" />
    </ItemTemplate>
      </asp:TemplateColumn>
       <asp:TemplateColumn HeaderText="2">
    <ItemTemplate>
    <asp:TextBox id="TextBox2" runat="server" />
    </ItemTemplate>
      </asp:TemplateColumn>
       <asp:TemplateColumn HeaderText="3">
    <ItemTemplate>
    <asp:TextBox id="TextBox3" runat="server" />
    </ItemTemplate>
      </asp:TemplateColumn>
     </Columns>
    </asp:DataGrid>
    </form><script language="javascript">
    function DoCalc()
    {
      var e = event.srcElement;
      if (e.type !== "text")
    return;  var p = e;
      while (p.tagName != "TABLE" && p.tagName != "TR")
    p = p.parentElement;  if (p.tagName == "TR")
      {
    var inputs = p.all.tags("INPUT");
    if (inputs.length >=3)
    {
    var vs = new Array(inputs.length);
    var s = 0;
    for (var i=0; i < vs.length-1; i++)
    if (inputs[i].type == "text")
      s +=  parseFloat(inputs[i].value); inputs[inputs.length-1].value = s;
    }
      }
    }
    </script>
      

  3.   

    Thanks to saucer(思归)  and   pboy116(只懂一点).