在数据列表中获取选中的项目值
本文关键字:项目 获取 数据 列表 | 更新日期: 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
,把它们放在ImageButton
的CommandArgument
属性中,在Server Side
处理程序中,从传递给处理程序的sender
中读取该字符串,为了方便,你可以从你想要的创建字符串,在JSON
字符串中,在服务器中,deserialize
将stringified
数据创建为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-设置ImageButton
的CommandName
属性,如:
<asp:ImageButton
ID="ImageButton3"
runat="server"
CommandName="ImageButtonClick"
/>
3-在DataList
的ItemTemplate
标签中创建一些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);
}
}