在数据列表中获取选中的项目值

本文关键字:项目 获取 数据 列表 | 更新日期: 2023-09-27 17:50:15

我在Datalist中使用ImageButton,并希望将选中的项目值存储在一个变量中以进一步处理它。如何获得数据上的按钮点击。我需要的数据是产品号,名称,价格等。任何帮助吗?Datalist的代码是

<asp:DataList ID="DataList1" runat="server" Width="100%" 
    onselectedindexchanged="DataList1_SelectedIndexChanged" 
    oncancelcommand="DataList1_CancelCommand" oneditcommand="DataList1_EditCommand">
    <ItemTemplate>
        <table class="style3" style="border: medium solid #000000; width: 100%;">
            <tr>
                <td rowspan="3" width="50%" valign="top">
                   <center style="border-width: thin; border-color: #000000; height: 149px; border-right-style: solid;"> 
                       <asp:HyperLink ID="HyperLink9" runat="server" Height="100px" 
                           NavigateUrl='<%# "~/ProductDetails.aspx?ProductId=" + Eval("Product_id") %>' 
                           Width="100px" style="margin-left: 0px; margin-bottom: 0px"> 
                           <asp:Image ID="img" runat="server" ImageUrl='<%# "images/" + Eval("Category")+"/"+Eval("Sub_category")+"/"+Eval("image") %>'   ToolTip='<%# Eval("Product_name") %>' /></asp:HyperLink>
                       <br />
                       <br />
                       <asp:Label ID="Label1" runat="server" 
                           Text='<%# "Price : " + Eval("Price") + " Rs." %>'></asp:Label>
                   </center>
                 </td>
                <td class="style6" style="width: 50%">
                   <center style="border-bottom-style: solid; border-width: thin; border-color: #000000"> 
                       <asp:HyperLink ID="HyperLink1" runat="server" 
                           Text='<%# Eval("Product_name") %>' ToolTip='<%# Eval("Product_name") %>'></asp:HyperLink>
                   </center>
                </td>
            </tr>
            <tr>
                <td class="style7" valign="top">
                    <center style="border-width: thin; border-color: #000000; height: auto; border-bottom-style: solid;">
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("Product_info") %>'></asp:Label></center>
                </td>
            </tr>
            <tr>
                <td class="style5">
                    <center>
                        <asp:ImageButton ID="ImageButton3" runat="server" Height="49px" 
                            ImageUrl="~/images/add to cart.jpg" onclick="ImageButton3_Click" 
                            Width="135px" />
                    </center>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:DataList>

我想在图像按钮上单击所选的行值应该存储在购物车表中,为此,我需要将此值存储到我的后端代码,并需要至少Productid值。

在数据列表中获取选中的项目值

你可以从你想要的创建一个string,把它们放在ImageButtonCommandArgument属性中,在Server Side处理程序中,从传递给处理程序的sender中读取该字符串,为了方便,你可以从你想要的创建字符串,在JSON字符串中,在服务器中,deserializestringified数据创建为Type,你可以这样设置CommandArgument:

<asp:ImageButton 
    ID="ImageButton3" 
    runat="server" 
    Height="49px" 
    CommandArgument='<%# "{'"Product_id'": '""+ Eval("Product_id") +"'", '"Price'": '"" + Eval("Price") + "'"}" %>'
    Width="135px" 
    OnClick="ImageButton3_Click" />

,在ImageButton的服务器端处理程序中,您需要:

protected void ImageButton3_Click(object sender, ImageClickEventArgs e)
{
    System.Web.Script.Serialization.JavaScriptSerializer o = new System.Web.Script.Serialization.JavaScriptSerializer();
    Argument arg = o.Deserialize<Argument>(((ImageButton)sender).CommandArgument);
}
class Argument
{
    // these property names, must be the same with what you set in 
    // CommandArgument where you write, for example : ... ='<%# "{'"Product_id'": '""+  ...
    // i assume the type of Product_id is guid
    public Guid Product_id { get; set; }
    // i assume the type of Price is decimal
    public decimal Price { get; set; }
}

** OR **

你可以像这样使用DataList的OnItemCommand事件:

1-设置处理程序:

<asp:DataList ID="DataList1" runat="server"
    OnItemCommand="DataList1_OnItemCommand">

2-设置ImageButtonCommandName属性,如:

<asp:ImageButton 
    ID="ImageButton3" 
    runat="server"
    CommandName="ImageButtonClick"
/>

3-在DataListItemTemplate标签中创建一些HiddenFields,包含您想要在服务器上的内容,如:

<asp:DataList ID="DataList1" runat="server"
    OnItemCommand="DataList1_OnItemCommand">
    <ItemTemplate>
        <asp:ImageButton 
            ID="ImageButton3" 
            runat="server"
            CommandName="ImageButtonClick"
        <asp:HiddenField ID="HiddenFieldProductID"
            runat="server" Value='<%# Eval("Product_id") %>' />  
        <asp:HiddenField ID="HiddenFieldPrice"
            runat="server" Value='<%# Eval("Price") %>' />  
    </ItemTemplate>
</asp:DataList>

4-实现DataList的服务器端OnItemCommand处理器,并创建HiddenFields并读取其值,如:

protected void DataList1_OnItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName == "ImageButtonClick")
        {
            Guid ID = Guid.Parse(((HiddenField)e.Item.FindControl("HiddenFieldProductID")).Value);
            decimal Price = Convert.ToDecimal(((HiddenField)e.Item.FindControl("HiddenFieldPrice")).Value);
        }
    }