我遇到的问题是这样的,我想在DataList中实现购物车中可以添加商品数量来实现总价的变化,可是我不知道在后台的C#代码中应该怎么获取ItemTemplate中插入的label或button,textbox的ID,我觉得获取这些控件的ID后就可以实现对Label中显示数据的更改
前台是这样的:
<asp:DataList ID="DataList1" runat="server" Height="126px" Width="1157px" onitemcommand="DataList1_ItemCommand"> <HeaderTemplate> <table style="width:100%;" > <tr> <td width="50px";> <asp:CheckBox ID="CheckBox1" runat="server" Text="全选" /> </td> <td width="300px"> 商品名称</td> <td width="250px"> 商品单价</td> <td width="200px";> 数量</td> <td width=200px;> 总价</td> </tr> </table> </HeaderTemplate> <ItemTemplate> <table style="width:100%;" > <tr> <td width=50px;> <asp:CheckBox ID="CheckBox2" runat="server" /> </td> <td width="50px"> <asp:Image ID="Image1" runat="server" Height="60px" Width="50px" ImageUrl='<%# DataBinder.Eval(Container.DataItem,"p_img","~//image//{0}") %>' /> </td> <td width="250px"> <asp:Label ID="Label1" runat="server" Text='<%# bind("p_name") %>'></asp:Label> </td> <td width="200px";> <asp:Label ID="Label2" runat="server" Text='<%# bind("p_price") %>'></asp:Label> </td> <td width="200px";> <asp:DropDownList ID="DropDownList1" runat="server" CommandName="select" onselectedindexchanged="DropDownList1_SelectedIndexChanged" style="width: 33px"> <asp:ListItem>1</asp:ListItem> <asp:ListItem>2</asp:ListItem> <asp:ListItem>3</asp:ListItem> <asp:ListItem>4</asp:ListItem> <asp:ListItem>5</asp:ListItem> <asp:ListItem>6</asp:ListItem> <asp:ListItem>7</asp:ListItem> </asp:DropDownList> </td> <td width="200px";> <asp:Label ID="Label4" runat="server" Text="Label4"></asp:Label> </td> </tr> </table> </ItemTemplate> </asp:DataList>
例如,我想获取商品单价,通过商品单价和数量(由DropDownList)获取,然后Label4显示总价,我应该在后台怎么获取label,DropDownList?
不知道你的总价字段在购物车中是由程序计算显示出来呢,还是直接保存在数据库中的。。。
方法一:后台代码实现:选择数量后,直接保存修改后的数量值,页面自动刷新,总价不也就更新了
方法二:脚本代码实现:选择数量后,自动通过单价与数量计算出总价,赋值给总价字段,数量字段的值可使用AJAX保存
我使用的是你的方法一,我的代码是这样的,但就是实现不了啊?
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Label Label2 = new Label(); Label2 = (Label)this.DataList1.FindControl("Label2"); Label Label4 = new Label(); Label4 = (Label)this.DataList1.FindControl("Label4"); DropDownList DropDownList1 = new DropDownList(); DropDownList1 = (DropDownList)this.DataList1.FindControl("DropDownList1"); int a = Convert.ToInt32(DropDownList1.Text); int b = Convert.ToInt32(Label2.Text); Label4.Text = (a * b).ToString(); Response.Redirect("WebForm2.aspx"); }
在这个事件中,你只要在跳转页面之前,将选择的数量保存到数据库中就可以
总价不要在这里计算,可以写一个方法单独调用或者直接在页面中绑定就行
面页刷新后总价自然会自己改变
@白雲天: 还是没有实现我想要的效果,但这个方法应该是可以的,应该是我没写好,我再试试,谢谢
System.Web.UI.WebControls.Label lblBarcode = e.Item.Controls[0].FindControl("UCProduct1") .FindControl("lblBarcode") as System.Web.UI.WebControls.Label;
麻烦问一下,你是在哪个事件中写的?我写的不行啊,而且根本获取不了啊?
@qinpei: 就DataList1_ItemCommand 這個事件
我刚试了一下,能够获取Label和DropDownList的ID但是获得的这两个并不能修改Label4也就是总价的值,应该怎么解决?
@無限遐想: 不行啊,我想用的是实现Label4的数据随选择的数据不同而变,但这样根本不行啊?只是获得了Label但没实现我想要的功能……应该怎么办?
@無限遐想: 而且我的是在DropDownList1的DropDownList1_SelectedIndexChanged事件中写的,我写好的是这样的,但根本就不能实现功能
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Label Label2 = new Label(); Label2 = (Label)this.DataList1.FindControl("Label2"); Label Label4 = new Label(); Label4 = (Label)this.DataList1.FindControl("Label4"); DropDownList DropDownList1 = new DropDownList(); DropDownList1 = (DropDownList)this.DataList1.FindControl("DropDownList1"); int a = Convert.ToInt32(DropDownList1.Text); int b = Convert.ToInt32(Label2.Text); Label4.Text = (a * b).ToString(); }
@qinpei: 這個你要綁定一下數據源。就是先寫到數據源。然後重新綁定一下數據