在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)
现在要求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)
现在要求TextBox1.Text TextBox2.Text 变化的同时Lable1 Lable2 符合下面的关系
Lable1.text=Lable1 + (TextBox1数值变化前 - TextBox1数值变化后)
Lable2.text=Lable1 + (TextBox2数值变化前 - TextBox2数值变化后)
这样情况 js怎样写? 麻烦前辈 给个完整代码 (.net 3.5)
然后就是从Datalist里面找控件的问题了
服务器端代码
(DataList1.Items[e.Item.ItemIndex].FindControl("TextBox1") as TextBox).Text 得到修改前的值
(e.Item.FindControl("TextBox1") as TextBox).Text 得到修改后的值如果要js实现,楼主最好先帖你的详细代码和需求
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去实现 这样效率高
Lable1.text=Lable1 + (TextBox1数值变化前 - TextBox1数值变化后)
Lable2.text=Lable1 + (TextBox2数值变化前 - TextBox2数值变化后) 上楼的代码是 DataList1_UpdateCommand后 才能变跟Lable1.text Lable2.text现在要求TextBox1.Text TextBox2.Text 变化的同时Lable1 Lable2 也变化
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");
// ....
// ....
}
事实上,你需求没有需要服务器端的数据来更新,完全是应该用 JS 来实现的,才是 UI友好的。
<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+")");
}