Asp.Net ListView从TextBox传递参数

时间:2011-08-30 22:32:37

标签: c# asp.net listview

嗨伙计们,我有这个可怕的问题,我希望你们中的任何人都可以帮助我,首先我有一个ListView,它有(比方说)3列Id,Quantity,以及带动作的图像按钮。

enter image description here

图像按钮启动函数createparameter,将字符串拆分为2个int变量,但我想从文本框QuantityTextBox中获取前1个,我该怎么做才能将文本框的值发送给函数,任何想法?

protected string CreateParameter(object arg1, object arg2) 
        {
            return string.Concat(arg1, "|", arg2);
        }

我希望有一个更好的方法来做到这一点,而不是每个列表项的foreach然后找到控制因为我不关心其他列表项,

1 个答案:

答案 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
          }
      }

    }
  }