嗨伙计们,我有这个可怕的问题,我希望你们中的任何人都可以帮助我,首先我有一个ListView,它有(比方说)3列Id,Quantity,以及带动作的图像按钮。
图像按钮启动函数createparameter,将字符串拆分为2个int变量,但我想从文本框QuantityTextBox中获取前1个,我该怎么做才能将文本框的值发送给函数,任何想法?
protected string CreateParameter(object arg1, object arg2)
{
return string.Concat(arg1, "|", arg2);
}
我希望有一个更好的方法来做到这一点,而不是每个列表项的foreach然后找到控制因为我不关心其他列表项,
答案 0 :(得分:1)
您想要做的事情将无法按照您想要的方式运作,因为用户可以更改文本框的值。所以在运行时尝试将它绑定到CommandArgument是不合理的,因为那里还没有值。
但是当您处理ListView的ItemCommand事件时,您可以访问单击该按钮的ListViewItem,因此您可以使用FindControl获取文本框并查看其值。
要使其正常工作,您需要为ImageButton控件添加CommandName值。您只需直接在命令参数中传递产品ID。
所以,你的按钮看起来像这样:
<asp:ImageButton ID="btnAdd" runat="server" Tooltip="Aggregar producto" CommandName="AddProduct"
CommandArgument="<%# Eval("IdProduct") %>" />
你的代码隐藏看起来像这样(未经测试):
protected void lv_Productos_OnItemCommand(object sender, ListViewCommandEventArgs e)
{
if (String.Equals(e.CommandName, "AddProduct"))
{
// Get a reference to your textbox in this item
TextBox textbox = e.Item.FindControl("QuantityTextBox") as TextBox;
if (textbox != null)
{
int quant = 0;
if (int.TryParse(textbox.Value, quant))
{
int prodId = (int)e.CommandArgument;
//do what you want with the quantity and product id
}
}
}
}