在datalist编辑面板里有TextBox1 , TextBox2 , Lable1 , Lable2 
  现在要求TextBox1.Text TextBox2.Text 变化的同时Lable1  Lable2 符合下面的关系 
  
  Lable1.text=Lable1 + (TextBox1数值变化前 [color=#FF6600]- TextBox1数值变化后[/color]) 
  Lable2.text=Lable1 + (TextBox2数值变化前 [color=#FF6600]- TextBox2数值变化后[/color]) 
  这样情况 js怎样写? 麻烦前辈 给个完整代码 (.net 3.5)

解决方案 »

  1.   

      在datalist编辑面板里有TextBox1 , TextBox2 , Lable1 , Lable2 
      现在要求TextBox1.Text TextBox2.Text 变化的同时Lable1  Lable2 符合下面的关系 
      
      Lable1.text=Lable1 + (TextBox1数值变化前 - TextBox1数值变化后) 
      Lable2.text=Lable1 + (TextBox2数值变化前 - TextBox2数值变化后)
     
      这样情况 js怎样写? 麻烦前辈 给个完整代码 (.net 3.5)
      

  2.   

    呵呵,居然还要去取以前填写的内容?你再放一个控件存放TextBox1数值变化前的值;
    然后就是从Datalist里面找控件的问题了
      

  3.   

    呵呵 上楼老大 想法和我一样 但我js不太懂 麻烦给个js代码 全点 
      

  4.   


    服务器端代码
    (DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1") as TextBox).Text 得到修改前的值
    (e.Item.FindControl("TextBox1") as TextBox).Text 得到修改后的值如果要js实现,楼主最好先帖你的详细代码和需求
      

  5.   


        protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.EditItem)
            {
                DataList datalist2 = e.Item.FindControl("DataList2") as DataList;
                Label La7 = e.Item.FindControl("Label68") as Label;
                foreach (DataListItem item2 in datalist2.Items)
                {
                    TextBox TB1 = item2.FindControl("TextBox11") as TextBox;
                    TextBox TB2 = item2.FindControl("TextBox22") as TextBox;
                    TextBox TB3 = item2.FindControl("TextBox33") as TextBox;
                    Label La4 = item2.FindControl("Label44") as Label;
                    Label La5 = item2.FindControl("Label55") as Label;
                    Label La6 = item2.FindControl("Label66") as Label;
                    La7.Text = TB1.Text;
                }
            }
        } //这里面获取未变化的值
         protected void DataList1_UpdateCommand(object source, DataListCommandEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.EditItem)
            {
                int i=0;
                DataList datalist2 = e.Item.FindControl("DataList2") as DataList;
                Label La7 = e.Item.FindControl("Label68") as Label;
                foreach (DataListItem item2 in datalist2.Items)
                {
                    i++;
                    TextBox TB1 = item2.FindControl("TextBox11") as TextBox;
                    TextBox TB2 = item2.FindControl("TextBox22") as TextBox;
                    TextBox TB3 = item2.FindControl("TextBox33") as TextBox;
                    if(i==1)
                    {
                        La7.Text =( Convert.ToDecimal(TB1.Text) - Convert.ToDecimal(La7.Text)).ToString();
                    }
                }
            }
        } //这里面是变化后 +上的差值 这些 我想在前台用 js去实现 这样效率高
      

  6.   

    现在要求TextBox1.Text TextBox2.Text 变化的同时Lable1  Lable2 符合下面的关系 
      
      Lable1.text=Lable1 + (TextBox1数值变化前 - TextBox1数值变化后) 
      Lable2.text=Lable1 + (TextBox2数值变化前 - TextBox2数值变化后) 上楼的代码是  DataList1_UpdateCommand后 才能变跟Lable1.text Lable2.text现在要求TextBox1.Text TextBox2.Text 变化的同时Lable1  Lable2 也变化 
      

  7.   


    1.
    使用 TextBox 的 TextChanged 事件<asp:TextBox1 id="TextBox1" TextChanged="TextBox_TextChanged" AutoPostBack=True runat=server /><asp:TextBox2 id="TextBox2" TextChanged="TextBox_TextChanged" AutoPostBack=True runat=server />// 以下代码未测试,不过逻辑很清晰了。
    protected void TextBox_TextChanged(object sender, EventArgs e)
    {
    TextBox txt = (TextBox)sender;
    DataListItem dli = (DataListItem)txt.NameContainer;
    TextBox t1, t2;
    if(txt.ID=="TextBox1"){
    t1=txt;
    t2 = (TextBox)dli.FindControl("TextBox2");
    }else{
    t1= (TextBox)dli.FindControl("TextBox1");
    t2 = txt;
    }
    Label lbl1 = (Label)dli.FindControl("Label1");
    // ....
    // ....
    }
      

  8.   

    2. 假如你无法忍受法1带来的动不动就 PostBack 问题,那么需要使用 JS!
    事实上,你需求没有需要服务器端的数据来更新,完全是应该用 JS 来实现的,才是 UI友好的。
      

  9.   

    js中关键是如果区分每个DataListItem 里的控件,使用 DataListItem.ItemIndex
      

  10.   

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
        <script type="text/javascript">
        var array=new Array();
        function minus(param,lableId,index)
        {
            document.getElementById(lableId).innerHTML=param-array[index];
            array[index]=param;
        }
        function initialArray()
        {
            var table=document.getElementById("DataList1");
            var texts=table.getElementsByTagName("input");
            for(i=0; i<texts.length; i++)
            {
              array[i]=texts[i].value;
            }
        }
        </script>
    </head>
    <body onload="initialArray()">
        <form id="form1" runat="server">
        <div align="center">
            <asp:DataList ID="DataList1" runat="server" OnItemDataBound="DataList1_ItemDataBound">
              <ItemTemplate>
                <asp:TextBox ID="TextBox1" Text="100" runat="server" />
                <asp:Label ID="Label1" Text="0" runat="server" />
              </ItemTemplate>
            </asp:DataList></div>
        </form>
    </body>
    </html>protected void DataList1_ItemDataBound ( object sender, DataListItemEventArgs e )
        {
            int index = e.Item.ItemIndex;
            string lableClientID = ( ( Label ) e.Item.FindControl ( "Label1" ) ).ClientID;
            ( ( TextBox ) e.Item.FindControl ( "TextBox1" ) ).Attributes.Add ("onchange","minus(this.value,'"+lableClientID+"',"+index+")");
        }