首页 新闻 会员 周边

怎么获取DataList模板ItemTemplate中插入的label或button,textbox的ID

0
悬赏园豆:5 [已解决问题] 解决于 2012-04-18 09:34

我遇到的问题是这样的,我想在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?

qinpei的主页 qinpei | 初学一级 | 园豆:197
提问于:2012-04-16 17:28
< >
分享
最佳答案
0

不知道你的总价字段在购物车中是由程序计算显示出来呢,还是直接保存在数据库中的。。。

方法一:后台代码实现:选择数量后,直接保存修改后的数量值,页面自动刷新,总价不也就更新了

方法二:脚本代码实现:选择数量后,自动通过单价与数量计算出总价,赋值给总价字段,数量字段的值可使用AJAX保存

收获园豆:5
KivenRo | 小虾三级 |园豆:1734 | 2012-04-16 18:07

我使用的是你的方法一,我的代码是这样的,但就是实现不了啊?

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");
        }
qinpei | 园豆:197 (初学一级) | 2012-04-16 18:14

在这个事件中,你只要在跳转页面之前,将选择的数量保存到数据库中就可以

总价不要在这里计算,可以写一个方法单独调用或者直接在页面中绑定就行

面页刷新后总价自然会自己改变

KivenRo | 园豆:1734 (小虾三级) | 2012-04-16 22:50

@白雲天: 还是没有实现我想要的效果,但这个方法应该是可以的,应该是我没写好,我再试试,谢谢

qinpei | 园豆:197 (初学一级) | 2012-04-18 09:35
其他回答(1)
1
      System.Web.UI.WebControls.Label lblBarcode = e.Item.Controls[0].FindControl("UCProduct1")
                    .FindControl("lblBarcode") as System.Web.UI.WebControls.Label;
無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-16 17:34

麻烦问一下,你是在哪个事件中写的?我写的不行啊,而且根本获取不了啊?

支持(0) 反对(0) qinpei | 园豆:197 (初学一级) | 2012-04-16 17:41

@qinpei: 就DataList1_ItemCommand 這個事件

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-16 17:49

我刚试了一下,能够获取Label和DropDownList的ID但是获得的这两个并不能修改Label4也就是总价的值,应该怎么解决?

支持(0) 反对(0) qinpei | 园豆:197 (初学一级) | 2012-04-16 17:53

@無限遐想: 不行啊,我想用的是实现Label4的数据随选择的数据不同而变,但这样根本不行啊?只是获得了Label但没实现我想要的功能……应该怎么办?

支持(0) 反对(0) qinpei | 园豆:197 (初学一级) | 2012-04-16 18:07

@無限遐想: 而且我的是在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();
        }
支持(0) 反对(0) qinpei | 园豆:197 (初学一级) | 2012-04-16 18:10

@qinpei: 這個你要綁定一下數據源。就是先寫到數據源。然後重新綁定一下數據

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-04-17 09:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册